ƵµÀÀ¸Ä¿
Ê×Ò³ > ³ÌÐò¿ª·¢ > ÒÆ¶¯¿ª·¢ > Android > ÕýÎÄ
Android¿ª·¢Ö®ListView AdapterÓÅ»¯
2013-12-06 14:41:37         À´Ô´£ºGeek Time  
Êղؠ  ÎÒҪͶ¸å

ÓëËùν¡°Õ½¶·Ãñ×塱һÍŶӺÏ×÷¿ª·¢Ò»ÏîÄ¿£¬×îºóÊÕβ½×¶Î¿ªÊ¼ÓÅ»¯£¬appÕæÌØÃ´Âý£¬ÏÈÖØadapter¿ªÊ¼

AndroidÔÚUIÓÅ»¯·½Ãæ¿ÉÒÔ´ÓÒÔÏÂÎå¸ö·½ÃæÈëÊÖ£º

¡¡¡¡¡ôAdapterÓÅ»¯

¡¡¡¡¡ô±³¾°ºÍͼƬÓÅ»¯

¡¡¡¡¡ô»æÍ¼ÓÅ»¯

¡¡¡¡¡ôÊÓͼºÍ²¼¾ÖÓÅ»¯

¡¡¡¡¡ôÄÚ´æ·ÖÅäÓÅ»¯

¡¡¡¡AdapterÓÅ»¯

¡¡¡¡Ê²Ã´ÊÇAdapter£¿

¡¡¡¡AdapterÔÚAndroidÖÐÕ¼¾ÝÒ»¸öÖØÒªµÄ½ÇÉ«£¬ËüÊÇÊý¾ÝºÍUI£¨View£©Ö®¼äÒ»¸öÖØÒªµÄŦ´ø¡£ÔÚ³£¼ûµÄView(ListView,GridView)µÈµØ·½¶¼ÐèÒªÓõ½Adapter¡£Èçͼ1Ö±¹ÛµÄ±í´ïÁËData¡¢Adapter¡¢ViewÈýÕߵĹØÏµ¡£

Adapter¡¢Êý¾Ý¡¢UIÈýÕß¹ØÏµ
ͼ1 Adapter¡¢Êý¾Ý¡¢UIÈýÕß¹ØÏµ

¡¡¡¡Ò»¡¢AndroidÖÐAdapter

Android-Adapter
ͼ2£ºAndroidÖÐAdapterÀàÐͲ㼶ͼ

¡¡¡¡ÓÉͼ2ÎÒÃÇ¿ÉÒÔ¿´µ½ÔÚAndroidÖÐÓëAdapterÓйصÄËùÓнӿڡ¢ÀàµÄÍêÕû²ã¼¶Í¼¡£ÔÚÎÒÃÇʹÓùý³ÌÖпÉÒÔ¸ù¾Ý×Ô¼ºµÄÐèÇóʵÏÖ½Ó¿Ú»òÕ߼̳ÐÀà½øÐÐÒ»¶¨µÄÀ©Õ¹¡£±È½Ï³£ÓõÄÓÐ BaseAdapter£¬ArrayAdapter£¬SimpleCursorAdapterµÈ¡£

¡¡¡¡BaseAdapterÊÇÒ»¸ö³éÏóÀ࣬¼Ì³ÐËüÐèҪʵÏֽ϶àµÄ·½·¨£¬ËùÒÔÒ²¾Í¾ßÓнϸߵÄÁé»îÐÔ£»

¡¡¡¡ArrayAdapterÖ§³Ö·ºÐͲÙ×÷£¬Í¨³£ÐèҪʵÏÖgetView·½·¨£¬ÌØÊâÇé¿öÏ£¨½áºÏÊý¾Ýrow id£©£¬ÎªÁËÈÃuiʼþÏàÓ¦´¦Àí·½±ãµã×îºÃÖØÐ´getItemId£»

¡¡¡¡SimpleCursorAdapter¿ÉÒÔÊÊÓÃÓÚ¼òµ¥µÄ´¿ÎÄ×ÖÐÍListView£¬ËüÐèÒªCursorµÄ×ֶκÍUIµÄid¶ÔÓ¦ÆðÀ´¡£ÈçÐèҪʵÏÖ¸ü¸´ÔÓµÄUIÒ²¿ÉÒÔÖØÐ´ÆäËû·½·¨¡£

¡¡¡¡¶þ¡¢Ò»¸ö¼Ì³ÐBaseAdapterµÄÀàµÄ´úÂë¶Î

   1.  1: /**  
2. 2: * ¸èÇúÁбíÊÊÅäÆ÷
3. 3: *
4. 4: * @version 2010-11-24 ÏÂÎç05:13:33
5. 5: * @author Hal
6. 6: */
7. 7: public class AudioListAdapter extends BaseAdapter {
8. 8:
9. 9: private Context mContext;
10. 10:
11. 11: // ¸èÇú¼¯ºÏ
12. 12: private ArrayList

¡¡¡¡AdapterÓëViewµÄÁ¬½ÓÖ÷ÒªÒÀ¿¿getViewÕâ¸ö·½·¨·µ»ØÎÒÃÇÐèÒªµÄ×Ô¶¨Òåview¡£ListViewÊÇAndroid appÖÐÒ»¸ö×î×î×î³£ÓõĿؼþÁË£¬ËùÒÔÈçºÎÈÃListViewÁ÷³©ÔËÐУ¬»ñÈ¡Á¼ºÃµÄÓû§ÌåÑéÊǷdz£ÖØÒªµÄ¡£¶ÔListViewÓÅ»¯¾ÍÊǶÔAdapterÖеÄgetView·½·¨½øÐÐÓÅ»¯¡£09ÄêµÄGoogle IO´ó»á¸ø³öµÄÓÅ»¯½¨ÒéÈçÏ£º

¡¡¡¡AdapterÓÅ»¯Ê¾Àý´úÂ룺

   1. @Override  
2. public View getView(int position, View convertView, ViewGroup parent) {
3. Log.d("MyAdapter", "Position:" + position + "---"
4. + String.valueOf(System.currentTimeMillis()));
5. ViewHolder holder;
6. if (convertView == null) {
7. final LayoutInflater inflater = (LayoutInflater) mContext
8. .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
9. convertView = inflater.inflate(R.layout.list_item_icon_text, ull);
10. holder = new ViewHolder();
11. holder.icon = (ImageView) convertView.findViewById(R.id.icon);
12. holder.text = (TextView) convertView.findViewById(R.id.text);
13. convertView.setTag(holder);
14. } else {
15. holder = (ViewHolder) convertView.getTag();
16. }
17. holder.icon.setImageResource(R.drawable.icon);
18. holder.text.setText(mData[position]);
19. return convertView;
20. }
21.
22. static class ViewHolder {
23. ImageView icon;
24.
25. TextView text;

¡¡¡¡ÒÔÉÏÊÇGoogle io´ó»áÉϸø³öµÄÓÅ»¯½¨Ò飬¾­¹ý³¢ÊÔListViewȷʵÁ÷³©ÁËÐí¶à¡£

   1. @Override  
2. public View getView(int position, View convertView, ViewGroup parent) {
3. Log.d("MyAdapter", "Position:" + position + "---"
4. + String.valueOf(System.currentTimeMillis()));
5. final LayoutInflater inflater = (LayoutInflater) mContext
6. .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
7. View v = inflater.inflate(R.layout.list_item_icon_text, null);
8. ((ImageView) v.findViewById(R.id.icon)).setImageResource(R.drawable.icon);
9. ((TextView) v.findViewById(R.id.text)).setText(mData[position]);
10. return v;
11. }

¡¡¡¡ÒÔÉÏÊDz»½¨ÒéµÄ×ö·¨£¡£¡

¡¡¡¡²»¹ýÎÒÃÇ»¹ÊÇÒª»³ÒÉһϣ¬SO£¬ÎÒÃÇ»¹ÊÇÀ´²âÊÔ¶Ô±Èһϡ£

¡¡¡¡²âÊÔ˵Ã÷£º

¡¡¡¡´ó¼Ò¿ÉÒÔ¿´µ½ÔÚgetViewµÄʱºòÎÒÃÇͨ¹ýlog´òÓ¡³öpositionºÍµ±Ç°ÏµÍ³Ê±¼ä¡£ÎÒÃÇͨ¹ý³õʼ»¯1000ÌõÊý¾Ýµ½AdapterÏÔʾµ½ListView£¬È»ºó¹ö¶¯µ½µ×²¿£¬¼ÆËã³öposition=0ºÍposition=999ʱµÄʱ¼ä¼ä¸ô¡£

¡¡¡¡²âÊÔ»ú×Ó£ºHTC Magic

¡¡¡¡²âÊÔʵ¼£º´ò¿ª²âÐò£¬ÈÃListViewÒ»Ö±¹ö¶¯µ×²¿¡£

device

¡¡¡¡²âÊÔ½á¹û£º

¡¡¡¡Á½ÖÖÇé¿öÔÚ²Ù×÷¹ý³ÌÖÐÌåÑéÃ÷ÏÔ²»Í¬£¬ÔÚÓÅ»¯µÄÇé¿öÏÂÁ÷³©ºÜ¶àºÜ¶à£¡

¡¡¡¡1¡¢ÓÅ»¯½¨Òé²âÊÔ½á¹û

   1. 12-05 10:44:46.039: DEBUG/MyAdapter(13929): Position:0---1291517086043   
2. 12-05 10:44:46.069: DEBUG/MyAdapter(13929): Position:1---1291517086072
3. 12-05 10:44:46.079: DEBUG/MyAdapter(13929): Position:2---1291517086085
4.
5. ¡­¡­
6.
7. 12-05 10:45:04.109: DEBUG/MyAdapter(13929): Position:997---1291517104112
8. 12-05 10:45:04.129: DEBUG/MyAdapter(13929): Position:998---1291517104135
9. 12-05 10:45:04.149: DEBUG/MyAdapter(13929): Position:999---1291517104154
10.
11. ºÄʱ£º17967
12.

¡¡¡¡2¡¢Ã»ÓÅ»¯µÄ²âÊÔ½á¹û

   1. 12-05 10:51:42.569: DEBUG/MyAdapter(14131): Position:0---1291517502573   
2. 12-05 10:51:42.589: DEBUG/MyAdapter(14131): Position:1---1291517502590
3. 12-05 10:51:42.609: DEBUG/MyAdapter(14131): Position:2---1291517502617
4.
5. ¡­¡­
6.
7. 12-05 10:52:07.079: DEBUG/MyAdapter(14131): Position:998---1291517527082
8. 12-05 10:52:07.099: DEBUG/MyAdapter(14131): Position:999---1291517527108
9.
10. ºÄʱ£º24535
11.

¡¡¡¡ÔÚ1000Ìõ¼Ç¼µÄÇé¿öϾÍÓÐÈç´Ë²î¾à£¬Ò»µ©Êý¾ÝnW+£¬ListViewµÄItem²¼¾Ö¸ü¼Ó¸´ÔÓµÄʱºò£¬ÓÅ»¯µÄ×÷Óþ͸ü¼ÓÍ»³öÁË£¡

------------------------------

ListView×÷ΪAndroid¿ª·¢ÖÐʹÓÃÆµÂÊ×î¸ßµÄÒ»¸ö¿Ø¼þ£¬±£Ö¤ListViewµÄÁ÷³©ÔËÐУ¬¶ÔÓû§ÌåÑéµÄÌá¸ßÖÁ¹ØÖØÒª¡£AdapterÊÇListViewºÍÊý¾ÝÔ´Ö®¼äµÄÖмäÈË£¬µ±Ã¿ÌõÊý¾Ý½øÈë¿É¼ûÇøÊ±£¬Adapter µÄ getView() »á±»µ÷Ó㬷µ»Ø´ú±í¾ßÌåÊý¾ÝµÄÊÓͼ£¬ÔڳɰÙÉÏǧÌõÊý¾Ý´¥Ãþ¹ö¶¯Ê±Æµ·±µ÷Óã¬Òò´ËÈçºÎÓÅ»¯AdapterÊÇÌá¸ßListViewÐÔÄܵĹؼü¡£

1. ʹÓÃViewHolderģʽ£¬Öظ´ÀûÓÃconvertView£¬¼õÉÙÆµ·±²éÕÒ

ÔÚ2009Äê Google IO¿ª·¢Õß´ó»áÖÐÒÑ×ö˵Ã÷£¬¿´Ò»ÏÂʹÓò»Í¬ÊµÏÖ·½Ê½Ö®¼äµÄ²î¾à£º

Adapter ÏÔʾÿÌõÊý¾ÝµÄ XML ²¼¾ÖÎļþÈçÏ£º

 
     
     

1. ×îÂý×ʵÓõķ½Ê½

public View getView(int position, View convertView, ViewGroup parent) {
	View item = mInflater.inflate(R.layout.list_item_icon_text, null);

	((TextView) item.findViewById(R.id.text)).setText(DATA[position]);
	((ImageView) item.findViewById(R.id.icon)).setImageBitmap(
			(position & 1) == 1 ? mIcon1 : mIcon2);

	return item;
}

2. ʹÓà convertView »ØÊÕÊÓͼ, ЧÂÊÌá¸ß 200%

public View getView(int position, View convertView, ViewGroup parent) { 
     if (convertView == null) { 
          convertView = mInflater.inflate(R.layout.item, null); 
     } 

     ((TextView) convertView.findViewById(R.id.text)).setText(DATA[position]); 
     ((ImageView) convertView.findViewById(R.id.icon)).setImageBitmap( 
               (position & 1) == 1 ? mIcon1 : mIcon2); 

     return convertView; 
}

3. ʹÓà ViewHolder ģʽ, ЧÂÊÔÙÌá¸ß 50%

static class ViewHolder { 
	TextView text; 
	ImageView icon; 
} 
public View getView(int pos, View convertView, ViewGroup parent){ 
    ViewHolder holder; 
    if (convertView == null) { 
        convertView = mInflater.inflate(R.layout.list_item, null); 
        holder = new ViewHolder();  
        holder.text = (TextView) convertView.findViewById(R.id.text)); 
        holder.icon = (ImageView) convertView.findViewButId(R.id.icon)); 
        convertView.setTag(holder); 
    } else { 
        holder = (ViewHolder) convertView.getTag(); 
    }  
    holder.text.setText(DATA[pos]); 
    holder.icon.setImageBitmap((pos & 1) == 1 ? mIcon1 : mIcon2); 
    return convertView; 
} 

¸üÐÂÂʱȽÏÈçÏÂͼ£º

QQ½ØÍ¼20130819151124

2. ʹÓù¤×÷Ï̼߳ÓÔØÊý¾Ý£¬¼õÇáUIÖ÷Ï̸߳ºµ££¬Ê¹UIÖ÷Ïß³ÌֻרעÓÚUI»æÖÆ

// Using an AsyncTask to load the slow images in a background thread
new AsyncTask() {
    private ViewHolder v;

    @Override
    protected Bitmap doInBackground(ViewHolder... params) {
        v = params[0];
        return mFakeImageLoader.getImage();
    }

    @Override
    protected void onPostExecute(Bitmap result) {
        super.onPostExecute(result);
        if (v.position == position) {
            // If this item hasn't been recycled already, hide the
            // progress and set and show the image
            v.progress.setVisibility(View.GONE);
            v.icon.setVisibility(View.VISIBLE);
            v.icon.setImageBitmap(result);
        }
    }
}.execute(holder);

3. ÓÅ»¯item²¼¾Ö£¬¾¡Á¿ÓÅ»¯×Óview²¼¾Ö²»±»¹ý¶ÉÖØ»æ£¬Ã¿Ò»µã×ÓviewµÄÓÅ»¯¶¼ÄÜÌá¸ßÕûÌåµÄÐÔÄÜ

ÓÅ»¯²¼¾Ö²ã´Î½á¹¹

Ò»¸öÆÕ±éµÄÎó½â¾ÍÊÇ£¬Ê¹Óûù±¾µÄ²¼¾Ö½á¹¹»á²úÉú¸ßЧµÄ²¼¾ÖÐÔÄÜ¡£È»¶øÃ¿Ò»¸öÌí¼Óµ½Ó¦ÓõĿؼþºÍ²¼¾Ö£¬¶¼ÐèÒª³õʼ»¯£¬²¼¾ÖλÖúͻæÖÆ¡£±ÈÈ磬ʹÓÃÒ»¸öǶÌ×µÄLinearLayout»áµ¼Ö¹ýÉîµÄ²¼¾Ö²ã´Î½á¹¹¡£´ËÍ⣬ǶÌ×¶à¸öʹÓÃlayout_weightÊôÐÔµÄLinearLayoutʵÀý»á»¨·Ñ¸ü´óµÄ´ú¼Û£¬ÒòΪÿһ¸ö×Ó²¼¾Ö¶¼Òª²âÁ¿Á½´Î¡£µ±Ä³¸ö²¼¾Ö±»Æµ·±äÖȾʱ£¬±ÈÈçËüÔÚListView»òGridViewÖÐʹÓ㬾ÍÏÔµÃÓÈÎªÖØÒª¡£

ÔÚÕâ½Ú¿ÎÖУ¬½«Ñ§»áʹÓÃHierachy ViewerºÍLayoutopt¹¤¾ß¶Ô²¼¾Ö½á¹¹½øÐмì²âºÍÓÅ»¯¡£

¼ì²âÄãµÄ²¼¾Ö

ÔÚAndroid SDK toolsÖаüº¬Ò»¸ö½Ð×öHierchyViewer¹¤¾ß£¬Ëü¿ÉÒÔÔÚÄãÔËÐÐÓ¦ÓÃʱºò°ïÖúÄã·ÖÎöÄãµÄ²¼¾ÖÐÔÄÜ¡£Í¨¹ýËüÄã¿ÉÒÔ·¢ÏÖÄãµÄ²¼¾ÖÖÐÐÔÄܱȽϲîµÄÄÇЩµØ·½¡£

HierchyViewerÐèÒªÄãÑ¡ÔñÒ»¸öÒÑÁ´½ÓµÄÉ豸»òÕßÄ£ÄâÆ÷ÖеÄÒ»¸öÔËÐеÄỊ̈߳¬ÏÔʾ³ö²¼¾ÖµÄÊ÷½á¹¹¡£Ã¿¸ö¿éÉϵĺìÂ̵ƴú±íËüµÄ²âÁ¿£¬²¼¾Ö£¬ÒÔ¼°»æÍ¼ÐÔÄÜ£¬°ïÖúÄãÕÒ³öDZÔÚµÄÎÊÌâ¡£

±ÈÈ磬ͼ1ÏÔʾÁËÒ»¸öÓÃÓÚListViewÖеÄItemµÄ²¼¾Ö¡£Õâ¸ö²¼¾ÖµÄ×ó±ßÏÔʾÁËÒ»·ùͼƬ£¬Á½¸öµþÔÚÒ»ÆðµÄÎÄ×Öitem·ÅÔÚÓұߡ£ÄÇЩ±»Öظ´¼ÓÔØµÄ²¼¾ÖÔÚÓÅ»¯Ê±ºòÏÔµÃÓÐÎªÖØÒª¡£

\

ͼ1. Ò»¸öListViewÄÚitemµÄ¸ÅÄîÉè¼Æ

hierchyviewer ¹¤¾ß¿ÉÒÔÔÚ/tools/ÖÐÕÒµ½¡£µ±´ò¿ª¸ø¹¤¾ßºó£¬¾Í»áÏÔʾ¿ÉÓõÄÉ豸ÁбíÒ»¸öÕâЩÉ豸ÖÐÔËÐеIJ¿·Ö¡£µã»÷¡°Load View Hierchy¡±Ñ¡Ïî²é¿´±»Ñ¡Öв¿·ÖµÄ²¼¾Ö²ã´Îͼ¡£±ÈÈ磬ͼ2ÏÔʾÁËͼ1Öв¼¾Ö½á¹¹Í¼¡£

\

ͼ2. ͼ1µÄ²¼¾Ö²ã´Î½á¹¹Í¼£¬Ê¹ÓÃÄÚǶµÄLinearLayoutʵÀý²¼¾Ö¡£<†·Ÿ"/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+CiA8aW1nIHNyYz0="/uploadfile/Collfiles/20131206/hierarchy-layouttimes.png" alt="\">

ͼ3. µã»÷²ã´ÎͼÖÐÒ»¸ö½Úµã£¬ÏÔʾËüµÄÔËÐÐʱ¼ä

ͼ2ÖУ¬Äã¿ÉÒÔ¿´µ½Ò»¸ö3²ãµÄ²¼¾Ö½á¹¹Í¼£¬²¢ÇÒÔÚ²¼¾ÖtextµÄitemsÀïÃæÓÐһЩÎÊÌâ¡£µã»÷ÕâЩitemsÏÔʾ½ø³ÌÖÐÿ¸ö½×¶ÎËù»¨·ÑµÄʱ¼ä¡£ËüÏÔʾµÄºÜÇå³þ£¬ÄÄЩitemsÔÚ²âÊÔ£¬²¼¾ÖÖл¨·Ñʱ¼ä×£¬ÄÄЩµØ·½ÐèÒª»¨·Ñʱ¼äÈ¥ÓÅ»¯¡£

ʹÓøò¼¾Ö¼ÓÔØËùÓÐitemËù»¨·ÑµÄʱ¼äÈçÏ£º

  • Measure: 0.977ms

  • Layout: 0.167ms

  • Draw: 2.717ms

    Ð޸IJ¼¾Ö

    ÒòΪÉÏÊö²¼¾ÖÐÔÄܽϵ͵ÄÔ­ÒòÖ÷ÒªÊÇÓÉÒ»¸öÄÚǶµÄLinearLayoutËùÒýÆð£¬½«¸Ã²¼¾ÖʹÓÃdz¶ø¹ãµÄ±âƽ»¯½á¹¹´úÌæÉî¶øÕ­µÄÊ÷Ðνṹ»¯Éè¼Æ£¬´Ó¶øÌá¸ßÐÔÄÜ¡£ÔÚÕâЩ²¼¾ÖÖУ¬½«RelativeLayout×÷Ϊһ¸ö¸ù½Úµã£¬ÕâÑù£¬Ä㽫»á¿´µ½¸Ã²¼¾Ö±äΪһ¸ö2²ãµÄ½á¹¹£¬Ð޸ĺóµÄ²¼¾ÖÈçÏ£º

    \

    ͼ4. ʹÓÃRelativeLayoutµÄͼ1µÄ²¼¾Ö¡£

    Ð޸ĺó¼ÓÔØitemËù»¨·ÑµÄʱ¼ä£º

    • Measure: 0.598ms

    • Layout: 0.110ms

    • Draw: 2.146ms

      ËäÈ»¿´ÆðÀ´Ìá¸ß¶ÈºÜС£¬µ«ÊÇÕâ²¼¾ÖÌá¸ßÊDZ»Öظ´²Ù×÷µÄ£¬Òò´Ë£¬Õâ¸ö²¼¾ÖÊÇÔÚlistviewÖеÄÿһ¸öitemÀïÃæ¡£

      ¸ü¶àÇé¿öµÄÒ»¸öʱ¼ä²îÒ죬ÊÇÔÚʹÓÃÁËlayout_weightÊôÐÔµÄLinearLayoutÉè¼ÆÀïÃæ£¬ÕâÑùµÄÉè¼Æ»á½µµÍ²âÁ¿µÄËÙ¶È¡£ÕâÖ»ÊÇÒ»¸öʾÀý˵Ã÷ÿ¸ö²¼¾ÖÊÇ·ñ±»Êʵ±µÄʹÓã¬ÔÚʹÓÃlayout weightÊôÐÔʱºò£¬ÄãÓ¦¸Ã½÷É÷¿¼ÂÇÊÇ·ñ±ØÒª¡£

      ʹÓÃLint

      ÕâÊÇÒ»¸öºÃϰ¹ß£¬ÔÚÄãµÄ²¼¾ÖÎļþÄÚÔËÐÐLint¹¤¾ß£¬Ñ°ÕÒÄÇЩ¿ÉÄÜÒªÓÅ»¯µÄ²¼¾Ö½á¹¹¡£Lint¹¤¾ß´úÌæLayoutopt¹¤¾ß£¬²¢ÇÒÓиü´óµÄ¹¦ÄÜ¡£ÈçÏÂÊÇLintµÄһЩʾÀý£º

      • ʹÓø´ÔÓµÄͼƬ£ºÔÚLineraLayout²¼¾ÖÖаüº¬Ò»¸öImageViewºÍÒ»¸öTextView£¬¿ÉÒÔʹÓÃÒ»¸ö¸´ÔÓµÄdrawable´úÌæ£¬ÐÔÄÜ»á¸üºÃ¡£
      • ºÏ²¢¸ù¿ò¼Ü£º¼ÙÈçÒ»¸öFrameLayout×÷Ϊһ¸ö²¼¾ÖµÄ¸ùÊÓͼ£¬²»Ìṩ±³¾°»òÕßÌî³ä£¬Ëü¿ÉÒÔ±»Ò»¸ö´øÓбêÖ¾µÄ²¼¾Ö´úÌæ¡£
      • ÎÞÓõÄÊ÷Ò¶£º¶ÔÓÚÒ»¸ö±âƽ½á¹¹ÖÐÒ»¸ö²¼¾ÖûÓк¢×Ó£¬Ã»Óб³¾°£¬¿ÉÒÔ±»É¾µô¡£
      • ÎÞÓõĸ¸Àࣺһ¸ö²¼¾Ö²»ÊÇScrollView»òÕß²»ÊÇÒ»¸ö¸ù²¼¾Ö£¬Ò²Ã»Óб³¾°£¬Ö»ÓÐÒ»¸öº¢×ӽڵ㣬¿ÉÒÔ±»É¾µô£¬º¢×Ó½ÚµãÖ±½Ó·ÅÈëµ½Õâ¸ö±âƽµÄ¸¸ÀàÀïÃæ¡£
      • Éî¶È²¼¾Ö£º²¼¾ÖÈôÓÐÌ«¶àÄÚǶ£¬ÔòÐÔÄܺܲ¿¼ÂÇʹÓÃRelativeLayout ÒÔ¼°GridLayoutµÈ±âƽ»¯²¼¾Ö´úÌæ¡£Ä¬Èϲ¼¾Ö×î´óÉî¶ÈÊÇ10.

        ʹÓÃLintÁíÒ»¸öºÃ´¦ÊÇ£¬Ëü±»ÄÚǶµ½ADT16+.µ±ÄãÔÚµ¼Èëapk£¬±à¼­»òÕß±£´æÒ»¸öxmlÎļþ£¬Lint¶¼»á×Ô¶¯ÔËÐС£µã»÷Eclipse¹¤¾ßÀ¸ÖÐLint°´Å¥£¬»áÈËÎªÇ¿ÖÆÔËÐÐLint.

        ÔÚEclipseÄÚʹÓÃLint,ËüÄÜ×Ô¶¯ÐÞ¸´Ò»Ð©ÎÊÌ⣬ΪÎÊÌâÌṩÐ޸Ľ¨Ò飬ֱ½Óµôתµ½ÎÊÌâ´úÂëλÖá£Èç¹ûÄã²»ÊÇÓÃEclipse¿ª·¢£¬Ò²¿ÉÒÔʹÓÃÃüÁîÐÐÆô¶¯Lint¡£¸ü¶àÐÅÏ¢Çë²ÎÕÕtools.android.com.

        ²Î¿¼£º

        https://kb.cnblogs.com/page/84589/

        https://developer.android.com/training/improving-layouts/optimizing-layout.html

        https://www.cnblogs.com/purediy/p/3267913.html
µã»÷¸´ÖÆÁ´½Ó ÓëºÃÓÑ·ÖÏí!»Ø±¾Õ¾Ê×Ò³
Ïà¹ØTAG±êÇ©
ÉÏһƪ£º [AndroidÔ´Âë·ÖÎö]À¶ÑÀËÑË÷¹ý³Ì·ÖÎö
ÏÂһƪ£ºAndroid À©´óImageViewµÄµã»÷ÇøÓò
Ïà¹ØÎÄÕÂ
ͼÎÄÍÆ¼ö
µã»÷ÅÅÐÐ

¹ØÓÚÎÒÃÇ | ÁªÏµÎÒÃÇ | ¹ã¸æ·þÎñ | Ͷ×ʺÏ×÷ | °æÈ¨ÉêÃ÷ | ÔÚÏß°ïÖú | ÍøÕ¾µØÍ¼ | ×÷Æ··¢²¼ | Vip¼¼ÊõÅàѵ | ¾Ù±¨ÖÐÐÄ

°æÈ¨ËùÓÐ: ºìºÚÁªÃË--ÖÂÁ¦ÓÚ×öʵÓõÄIT¼¼ÊõÑ§Ï°ÍøÕ¾