Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
Android ActionBarÍêÈ«½âÎö£¬Ê¹Óùٷ½ÍƼöµÄ×î¼Ñµ¼º½À¸
 
×÷Õß singwhatiwanna £¬»ðÁú¹ûÈí¼þ    ·¢²¼ÓÚ 2014-10-24
  6627  次浏览      29
 

Action BarÊÇÒ»ÖÖЉˆµÄµ¼º½À¸¹¦ÄÜ£¬ÔÚAndroid 3.0Ö®ºó¼ÓÈ뵽ϵͳµÄAPIµ±ÖУ¬Ëü±êʶÁËÓû§µ±Ç°²Ù×÷½çÃæµÄλÖ㬲¢ÌṩÁ˶îÍâµÄÓû§¶¯×÷¡¢½çÃæµ¼º½µÈ¹¦ÄÜ¡£Ê¹ÓÃActionBarµÄºÃ´¦ÊÇ£¬Ëü¿ÉÒÔ¸øÌṩһÖÖÈ«¾ÖͳһµÄUI½çÃæ£¬Ê¹µÃÓû§ÔÚʹÓÃÈκÎÒ»¿îÈí¼þʱ¶¼¶®µÃ¸ÃÈçºÎ²Ù×÷£¬²¢ÇÒActionBar»¹¿ÉÒÔ×Ô¶¯ÊÊÓ¦¸÷ÖÖ²»Í¬´óСµÄÆÁÄ»¡£ÏÂÃæÊÇÒ»ÕÅʹÓÃActionBarµÄ½çÃæ½ØÍ¼£º

ÆäÖУ¬[1]ÊÇActionBarµÄͼ±ê£¬[2]ÊÇÁ½¸öaction°´Å¥£¬[3]ÊÇoverflow°´Å¥¡£

ÓÉÓÚAction BarÊÇÔÚ3.0ÒÔºóµÄ°æ±¾ÖмÓÈëµÄ£¬Èç¹ûÏëÔÚ2.xµÄ°æ±¾ÀïʹÓÃActionBarµÄ»°ÔòÐèÒªÒýÈëSupport Library£¬²»¹ý3.0֮ǰ°æ±¾µÄÊг¡Õ¼ÓÐÂÊÒѾ­·Ç³£Ð¡ÁË£¬ÕâÀï¼òµ¥Æð¼ûÎÒÃǾͲ»ÔÙ¿¼ÂÇÈ¥×öÏòϼæÈÝ£¬¶øÊÇÖ»¿¼ÂÇ4.0ÒÔÉϰ汾µÄÓ÷¨¡£

Ìí¼ÓºÍÒÆ³ýAction Bar

ActionBarµÄÌí¼Ó·Ç³£¼òµ¥£¬Ö»ÐèÒªÔÚAndroidManifest.xmlÖÐÖ¸¶¨Application»òActivityµÄthemeÊÇTheme.Holo»òÆä×ÓÀà¾Í¿ÉÒÔÁË£¬¶øÊ¹ÓÃEclipse´´½¨µÄÏîÄ¿×Ô¶¯¾Í»á½«ApplicationµÄthemeÖ¸¶¨³ÉTheme.Holo£¬ËùÒÔActionBarĬÈ϶¼ÊÇÏÔʾ³öÀ´µÄ¡£Ð½¨Ò»¸ö¿ÕÏîÄ¿²¢ÔËÐУ¬Ð§¹ûÈçÏÂͼËùʾ£º

¶øÈç¹ûÏëÒªÒÆ³ýActionBarµÄ»°Í¨³£ÓÐÁ½ÖÖ·½Ê½£¬Ò»Êǽ«themeÖ¸¶¨³ÉTheme.Holo.NoActionBar£¬±íʾʹÓÃÒ»¸ö²»°üº¬ActionBarµÄÖ÷Ì⣬¶þÊÇÔÚActivityÖе÷ÓÃÒÔÏ·½·¨£º

ActionBar actionBar = getActionBar();  
actionBar.hide();

ÏÖÔÚÖØÐÂÔËÐÐһϳÌÐò£¬¾Í¿ÉÒÔ¿´µ½ActionBar²»ÔÙÏÔʾÁË£¬ÈçÏÂͼËùʾ£º

ÐÞ¸ÄAction BarµÄͼ±êºÍ±êÌâ

ĬÈÏÇé¿öÏ£¬ÏµÍ³»áʹÓÃ<application>»òÕß<activity>ÖÐiconÊôÐÔÖ¸¶¨µÄͼƬÀ´×÷ΪActionBarµÄͼ±ê£¬µ«ÊÇÎÒÃÇÒ²¿ÉÒԸıäÕâһĬÈÏÐÐΪ¡£Èç¹ûÎÒÃÇÏëҪʹÓÃÁíÍâÒ»ÕÅͼƬÀ´×÷ΪActionBarµÄͼ±ê£¬¿ÉÒÔÔÚ<application>»òÕß<activity>ÖÐͨ¹ýlogoÊôÐÔÀ´½øÐÐÖ¸¶¨¡£±ÈÈçÏîÄ¿µÄres/drawableĿ¼ÏÂÓÐÒ»ÕÅweather.pngͼƬ£¬¾Í¿ÉÒÔÔÚAndroidManifest.xmlÖÐÕâÑùÖ¸¶¨£º

<activity  
android:name="com.example.actionbartest.MainActivity"
android:logo="@drawable/weather" >
</activity>

ÏÖÔÚÖØÐÂÔËÐÐһϳÌÐò£¬Ð§¹ûÈçÏÂͼËùʾ£º

OK£¬ActionBarµÄͼ±êÒѾ­Ð޸ijɹ¦ÁË£¬ÄÇô±êÌâÖеÄÄÚÈݸÃÔõÑùÐÞ¸ÄÄØ£¿ÆäʵҲºÜ¼òµ¥£¬Ê¹ÓÃlabelÊôÐÔÀ´Ö¸¶¨Ò»¸ö×Ö·û´®¾Í¿ÉÒÔÁË£¬ÈçÏÂËùʾ£º

<activity  
android:name="com.example.actionbartest.MainActivity"
android:label="ÌìÆø"
android:logo="@drawable/weather" >
</activity>

ÏÖÔÚÖØÐÂÔËÐÐһϳÌÐò£¬½á¹ûÈçÏÂͼËùʾ£º

Ìí¼ÓAction°´Å¥

ActionBar»¹¿ÉÒÔ¸ù¾ÝÓ¦ÓóÌÐòµ±Ç°µÄ¹¦ÄÜÀ´ÌṩÓëÆäÏà¹ØµÄAction°´Å¥£¬ÕâЩ°´Å¥¶¼»áÒÔͼ±ê»òÎÄ×ÖµÄÐÎʽֱ½ÓÏÔʾÔÚActionBarÉÏ¡£µ±È»£¬Èç¹û°´Å¥¹ý¶à£¬ActionBarÉÏÏÔʾ²»Í꣬¶à³öµÄһЩ°´Å¥¿ÉÒÔÒþ²ØÔÚoverflowÀïÃæ£¨×îÓұߵÄÈý¸öµã¾ÍÊÇoverflow°´Å¥£©£¬µã»÷Ò»ÏÂoverflow°´Å¥¾Í¿ÉÒÔ¿´µ½È«²¿µÄAction°´Å¥ÁË¡£

µ±ActivityÆô¶¯µÄʱºò£¬ÏµÍ³»áµ÷ÓÃActivityµÄonCreateOptionsMenu()·½·¨À´È¡³öËùÓеÄAction°´Å¥£¬ÎÒÃÇÖ»ÐèÒªÔÚÕâ¸ö·½·¨ÖÐÈ¥¼ÓÔØÒ»¸ömenu×ÊÔ´£¬²¢°ÑËùÓеÄAction°´Å¥¶¼¶¨ÒåÔÚ×ÊÔ´ÎļþÀïÃæ¾Í¿ÉÒÔÁË¡£

ÄÇôÎÒÃÇÏÈÀ´¿´ÏÂmenu×ÊÔ´Îļþ¸ÃÈçºÎ¶¨Ò壬´úÂëÈçÏÂËùʾ£º

<menu xmlns:android="http://schemas.android.com/apk/res/android"  
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.example.actionbartest.MainActivity" >

<item
android:id="@+id/action_compose"
android:icon="@drawable/ic_action_compose"
android:showAsAction="always"
android:title="@string/action_compose"/>
<item
android:id="@+id/action_delete"
android:icon="@drawable/ic_action_delete"
android:showAsAction="always"
android:title="@string/action_delete"/>
<item
android:id="@+id/action_settings"
android:icon="@drawable/ic_launcher"
android:showAsAction="never"
android:title="@string/action_settings"/>

</menu>

¿ÉÒÔ¿´µ½£¬ÕâÀïÎÒÃÇͨ¹ýÈý¸ö<item>±êÇ©¶¨ÒåÁËÈý¸öAction°´Å¥¡£<item>±êÇ©ÖÐÓÖÓÐһЩÊôÐÔ£¬ÆäÖÐidÊǸÃAction°´Å¥µÄΨһ±êʶ·û£¬iconÓÃÓÚÖ¸¶¨¸Ã°´Å¥µÄͼ±ê£¬titleÓÃÓÚÖ¸¶¨¸Ã°´Å¥¿ÉÄÜÏÔʾµÄÎÄ×Ö£¨ÔÚͼ±êÄÜÏÔʾµÄÇé¿öÏ£¬Í¨³£²»»áÏÔʾÎÄ×Ö£©£¬showAsActionÔòÖ¸¶¨Á˸ð´Å¥ÏÔʾµÄλÖã¬Ö÷ÒªÓÐÒÔϼ¸ÖÖÖµ¿ÉÑ¡£ºalways±íʾÓÀÔ¶ÏÔʾÔÚActionBarÖУ¬Èç¹ûÆÁÄ»¿Õ¼ä²»¹»ÔòÎÞ·¨ÏÔʾ£¬ifRoom±íʾÆÁÄ»¿Õ¼ä¹»µÄÇé¿öÏÂÏÔʾÔÚActionBarÖУ¬²»¹»µÄ»°¾ÍÏÔʾÔÚoverflowÖУ¬neverÔò±íʾÓÀÔ¶ÏÔʾÔÚoverflowÖС£

½Ó×Å£¬ÖØÐ´ActivityµÄonCreateOptionsMenu()·½·¨£¬´úÂëÈçÏÂËùʾ£º

@Override  
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main, menu);
return super.onCreateOptionsMenu(menu);
}

Õⲿ·Ö´úÂëºÜ¼òµ¥£¬½ö½öÊǵ÷ÓÃÁËMenuInflaterµÄinflate()·½·¨À´¼ÓÔØmenu×ÊÔ´¾Í¿ÉÒÔÁË¡£ÏÖÔÚÖØÐÂÔËÐÐһϳÌÐò£¬½á¹ûÈçÏÂͼËùʾ£º

¿ÉÒÔ¿´µ½£¬action_composeºÍaction_deleteÕâÁ½¸ö°´Å¥ÒѾ­ÔÚActionBarÖÐÏÔʾ³öÀ´ÁË£¬¶øaction_settingsÕâ¸ö°´Å¥ÓÉÓÚshowAsActionÊôÐÔÉèÖóÉÁËnever£¬ËùÒÔ±»Òþ²Øµ½ÁËoverflowµ±ÖУ¬Ö»Òªµã»÷Ò»ÏÂoverflow°´Å¥¾Í¿ÉÒÔ¿´µ½ËüÁË¡£

ÕâÀïÎÒÃÇ×¢Òâµ½£¬ÏÔʾÔÚActionBarÉϵİ´Å¥¶¼Ö»ÓÐÒ»¸öͼ±ê¶øÒÑ£¬ÎÒÃÇÔÚtitleÖÐÖ¸¶¨µÄÎÄ×Ö²¢Ã»ÓÐÏÔʾ³öÀ´¡£Ã»´í£¬titleÖеÄÄÚÈÝͨ³£Çé¿öÏÂÖ»»áÔÚoverflowÖÐÏÔʾ³öÀ´£¬ActionBarÖÐÓÉÓÚÆÁÄ»¿Õ¼äÓÐÏÞ£¬Ä¬ÈÏÊDz»»áÏÔʾtitleÄÚÈݵġ£µ«ÊdzöÓÚÒÔϼ¸ÖÖÒòËØ¿¼ÂÇ£¬¼´Ê¹titleÖеÄÄÚÈÝÎÞ·¨ÏÔʾ³öÀ´£¬ÎÒÃÇÒ²Ó¦¸Ã¸øÃ¿¸öitemÖж¼Ö¸¶¨Ò»¸ötitleÊôÐÔ£º

µ±ActionBarÖеÄÊ£Óà¿Õ¼ä²»×ãµÄʱºò£¬Èç¹ûAction°´Å¥Ö¸¶¨µÄshowAsActionÊôÐÔÊÇifRoomµÄ»°£¬¸ÃAction°´Å¥¾Í»á³öÏÖÔÚoverflowµ±ÖУ¬´Ëʱ¾ÍÖ»ÓÐtitleÄܹ»ÏÔʾÁË¡£

Èç¹ûAction°´Å¥ÔÚActionBarÖÐÏÔʾ£¬Óû§¿ÉÄÜͨ¹ý³¤°´¸ÃAction°´Å¥µÄ·½Ê½À´²é¿´µ½titleµÄÄÚÈÝ¡£

ÏìÓ¦Action°´Å¥µÄµã»÷ʼþ

µ±Óû§µã»÷Action°´Å¥µÄʱºò£¬ÏµÍ³»áµ÷ÓÃActivityµÄonOptionsItemSelected()·½·¨£¬Í¨¹ý·½·¨´«ÈëµÄMenuItem²ÎÊý£¬ÎÒÃÇ¿ÉÒÔµ÷ÓÃËüµÄgetItemId()·½·¨ºÍmenu×ÊÔ´ÖеÄid½øÐбȽϣ¬´Ó¶ø±æ±ð³öÓû§µã»÷µÄÊÇÄÄÒ»¸öAction°´Å¥£¬±ÈÈ磺

@Override  
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_compose:
Toast.makeText(this, "Compose", Toast.LENGTH_SHORT).show();
return true;
case R.id.action_delete:
Toast.makeText(this, "Delete", Toast.LENGTH_SHORT).show();
return true;
case R.id.action_settings:
Toast.makeText(this, "Settings", Toast.LENGTH_SHORT).show();
return true;
default:
return super.onOptionsItemSelected(item);
}
}

¿ÉÒÔ¿´µ½£¬ÎÒÃÇÈÃÿ¸öAction°´Å¥±»µã»÷µÄʱºò¶¼µ¯³öÒ»¸öToast£¬ÏÖÔÚÖØÐÂÔËÐÐһϴúÂ룬½á¹ûÈçÏÂͼËùʾ£º

ͨ¹ýAction Barͼ±ê½øÐе¼º½

ÆôÓÃActionBarͼ±êµ¼º½µÄ¹¦ÄÜ£¬¿ÉÒÔÔÊÐíÓû§¸ù¾Ýµ±Ç°Ó¦ÓõÄλÖÃÀ´ÔÚ²»Í¬½çÃæÖ®¼äÇл»¡£±ÈÈ磬A½çÃæÕ¹Ê¾ÁËÒ»¸öÁÐ±í£¬µã»÷ijһÏîÖ®ºó½øÈëÁËB½çÃæ£¬ÕâʱB½çÃæ¾ÍÓ¦¸ÃÆôÓÃActionBarͼ±êµ¼º½¹¦ÄÜ£¬ÕâÑù¾Í¿ÉÒԻص½A½çÃæ¡£

ÎÒÃÇ¿ÉÒÔͨ¹ýµ÷ÓÃsetDisplayHomeAsUpEnabled()·½·¨À´ÆôÓÃActionBarͼ±êµ¼º½¹¦ÄÜ£¬±ÈÈ磺

@Override  
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTitle("ÌìÆø");
setContentView(R.layout.activity_main);
ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
}

ÏÖÔÚÖØÐÂÔËÐÐһϳÌÐò£¬½á¹ûÈçÏÂͼËùʾ£º

¿ÉÒÔ¿´µ½£¬ÔÚActionBarͼ±êµÄ×ó²à³öÏÖÁËÒ»¸öÏò×óµÄ¼ýÍ·£¬Í¨³£Çé¿öÏÂÕâ¶¼±íʾ·µ»ØµÄÒâ˼£¬Òò´Ë×î¼òµ¥µÄʵÏÖ¾ÍÊÇÔÚËüµÄµã»÷ʼþÀïÃæ¼ÓÈëfinish()·½·¨¾Í¿ÉÒÔÁË£¬ÈçÏÂËùʾ£º

@Override  
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
return true;
¡­¡­
}
}

µ±µã»÷ActionBarͼ±êµÄʱºò£¬ÏµÍ³Í¬Ñù»áµ÷ÓÃonOptionsItemSelected()·½·¨£¬²¢ÇÒ´ËʱµÄitemIdÊÇandroid.R.id.home£¬ËùÒÔfinish()·½·¨Ò²¾ÍÊǼÓÔÚÕâÀïµÄÁË¡£

ÏÖÔÚ¿´ÉÏÈ¥£¬ActionBarµ¼º½ºÍBack¼üµÄ¹¦ÄÜÃ²ËÆÊÇÒ»ÑùµÄ¡£Ã»´í£¬Èç¹ûÎÒÃÇÖ»ÊǼòµ¥µØfinishÁËһϣ¬ActionBarµ¼º½ºÍBack¼üµÄ¹¦ÄÜÊÇÍêȫһÑùµÄ£¬µ«ActionBarµ¼º½µÄÉè¼Æ³õÖÔ²¢²»ÊÇÕâÑùµÄ£¬ËüºÍBack¼üµÄ¹¦ÄÜ»¹ÊÇÓÐÒ»Ð©Çø±ðµÄ£¬¾Ù¸öÀý×Ó°É¡£

ÉÏͼÖеÄConversation ListÊÇÊÕ¼þÏäµÄÖ÷½çÃæ£¬ÏÖÔÚÎÒÃǵã»÷µÚÒ»·âÓʼþ»á½øÈëµ½Conversation1 details½çÃæ£¬È»ºóµã»÷ÏÂÒ»·âÓʼþ»á½øÈëµ½Conversation 2 details½çÃæ£¬ÔÙµã»÷ÏÂÒ»·âÓÊÏä»á½øÈëµ½Conversation3 details½çÃæ¡£ºÃµÄ£¬Õâ¸öʱºòÈç¹ûÎÒÃǰ´ÏÂBack¼ü£¬Ó¦¸Ã»á»Øµ½Conversation 2 details½çÃæ£¬ÔÙ°´Ò»´ÎBack¼üÓ¦¸Ã»Øµ½Conversation1 details½çÃæ£¬ÔÙ°´Ò»´ÎBack¼ü²Å»á»Øµ½Conversation List¡£¶øActionBarµ¼º½Ôò²»Ó¦¸Ã±íÏÖ³öÕâÖÖÐÐΪ£¬ÎÞÂÛÎÒÃǵ±Ç°ÔÚÄÄÒ»¸öConversation details½çÃæ£¬µã»÷һϵ¼º½°´Å¥¶¼Ó¦¸Ã»Øµ½Conversation List½çÃæ²Å¶Ô¡£

Õâ¾ÍÊÇActionBarµ¼º½ºÍBack¼üÔÚÉè¼ÆÉϵÄÇø±ð£¬ÄÇô¸ÃÔõÑù²ÅÄÜʵÏÖÕâÑùµÄ¹¦ÄÜÄØ£¿Æäʵ²¢²»¸´ÔÓ£¬ÊµÏÖ±ê×¼µÄActionBarµ¼º½¹¦ÄÜÖ»ÐèÈý²½×ß¡£

µÚÒ»²½ÎÒÃÇÒѾ­ÊµÏÖÁË£¬¾ÍÊǵ÷ÓÃsetDisplayHomeAsUpEnabled()·½·¨£¬²¢´«Èëtrue¡£

µÚ¶þ²½ÐèÒªÔÚAndroidManifest.xmlÖÐÅäÖø¸Activity£¬ÈçÏÂËùʾ£º

<activity  
android:name="com.example.actionbartest.MainActivity"
android:logo="@drawable/weather" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.actionbartest.LaunchActivity" />
</activity>

¿ÉÒÔ¿´µ½£¬ÕâÀïͨ¹ýmeta-data±êǩָ¶¨ÁËMainActivityµÄ¸¸ActivityÊÇLaunchActivity£¬ÔÚAndroid 4.1°æ±¾Ö®ºó£¬Ò²¿ÉÒÔÖ±½ÓʹÓÃandroid:parentActivityNameÕâ¸öÊôÐÔÀ´½øÐÐÖ¸¶¨£¬ÈçÏÂËùʾ£º

<activity  
android:name="com.example.actionbartest.MainActivity"
android:logo="@drawable/weather"
android:parentActivityName="com.example.actionbartest.LaunchActivity" >
</activity>

µÚÈý²½ÔòÐèÒª¶Ôandroid.R.id.homeÕâ¸öʼþ½øÐÐÒ»Ð©ÌØÊâ´¦Àí£¬ÈçÏÂËùʾ£º

@Override  
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
Intent upIntent = NavUtils.getParentActivityIntent(this);
if (NavUtils.shouldUpRecreateTask(this, upIntent)) {
TaskStackBuilder.create(this)
.addNextIntentWithParentStack(upIntent)
.startActivities();
} else {
upIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
NavUtils.navigateUpTo(this, upIntent);
}
return true;
......
}
}

ÆäÖУ¬µ÷ÓÃNavUtils.getParentActivityIntent()·½·¨¿ÉÒÔ»ñÈ¡µ½Ìø×ªÖÁ¸¸ActivityµÄIntent£¬È»ºóÈç¹û¸¸ActivityºÍµ±Ç°ActivityÊÇÔÚͬһ¸öTaskÖеģ¬ÔòÖ±½Óµ÷ÓÃnavigateUpTo()·½·¨½øÐÐÌø×ª£¬Èç¹û²»ÊÇÔÚͬһ¸öTaskÖеģ¬ÔòÐèÒª½èÖúTaskStackBuilderÀ´´´½¨Ò»¸öеÄTask¡£
ÕâÑù£¬¾Í°´ÕÕ±ê×¼µÄ¹æ·¶³É¹¦ÊµÏÖActionBarµ¼º½µÄ¹¦ÄÜÁË¡£

Ìí¼ÓAction View

ActionViewÊÇÒ»ÖÖ¿ÉÒÔÔÚActionBarÖÐÌæ»»Action°´Å¥µÄ¿Ø¼þ£¬Ëü¿ÉÒÔÔÊÐíÓû§ÔÚ²»Çл»½çÃæµÄÇé¿öÏÂͨ¹ýActionBarÍê³ÉһЩ½ÏΪ·á¸»µÄ²Ù×÷¡£±ÈÈç˵£¬ÄãÐèÒªÍê³ÉÒ»¸öËÑË÷¹¦ÄÜ£¬¾Í¿ÉÒÔ½«SeachViewÕâ¸ö¿Ø¼þÌí¼Óµ½ActionBarÖС£

ΪÁËÉùÃ÷Ò»¸öActionView£¬ÎÒÃÇ¿ÉÒÔÔÚmenu×ÊÔ´ÖÐͨ¹ýactionViewClassÊôÐÔÀ´Ö¸¶¨Ò»¸ö¿Ø¼þ£¬ÀýÈç¿ÉÒÔʹÓÃÈçÏ·½Ê½Ìí¼ÓSearchView£º

<menu xmlns:android="http://schemas.android.com/apk/res/android" >  

<item
android:id="@+id/action_search"
android:icon="@drawable/ic_action_search"
android:actionViewClass="android.widget.SearchView"
android:showAsAction="ifRoom|collapseActionView"
android:title="@string/action_search" />
......

</menu>

×¢ÒâÔÚshowAsActionÊôÐÔÖÐÎÒÃÇ»¹ÉùÃ÷ÁËÒ»¸öcollapseActionView£¬Õâ¸öÖµ±íʾ¸Ã¿Ø¼þ¿ÉÒÔ±»ºÏ²¢³ÉÒ»¸öAction°´Å¥¡£

ÏÖÔÚÖØÐÂÔËÐÐһϳÌÐò£¬Ð§¹ûÈçÏÂͼËùʾ£º

OK£¬¹ûÈ»ÓÐÒ»¸öËÑË÷ÑùʽµÄAction°´Å¥³öÏÖÁË£¬ÏÖÔÚµã»÷Ò»ÏÂÕâ¸öËÑË÷°´Å¥£¬Ð§¹ûÈçÏÂͼËùʾ£º

¿ÉÒÔ¿´µ½£¬ÕâʱSearchView¾Í»áÕ¹¿ªÕ¼ÂúÕû¸öActionBar£¬¶øÆäËüµÄAction°´Å¥ÓÉÓÚ½«showAsActionÊôÐÔÉèÖóÉÁËifRoom£¬´Ëʱ¶¼»áÒþ²Øµ½overflowµ±ÖС£

Èç¹ûÄ㻹ϣÍûÔÚ´úÂëÖжÔSearchViewµÄÊôÐÔ½øÐÐÅäÖ㨱ÈÈçÌí¼Ó¼àÌýʼþµÈ£©£¬ÍêȫûÓÐÎÊÌ⣬ֻÐèÒªÔÚonCreateOptionsMenu()·½·¨ÖлñÈ¡¸ÃActionViewµÄʵÀý¾Í¿ÉÒÔÁË£¬´úÂëÈçÏÂËùʾ£º

@Override  
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main, menu);
MenuItem searchItem = menu.findItem(R.id.action_search);
SearchView searchView = (SearchView) searchItem.getActionView();
// ÅäÖÃSearchViewµÄÊôÐÔ
......
return super.onCreateOptionsMenu(menu);
}

Ôڵõ½ÁËSearchViewµÄʵÀýÖ®ºó£¬¾Í¿ÉÒÔÈÎÒâµØÅäÖÃËüµÄ¸÷ÖÖÊôÐÔÁË¡£¹ØÓÚSearchViewµÄ¸ü¶àÏêϸÓ÷¨£¬¿ÉÒԲο¼¹Ù·½Îĵµ http://developer.android.com/guide/topics/search/search-dialog.html ¡£

³ý´ËÖ®Í⣬ÓÐЩ³ÌÐò¿ÉÄÜ»¹Ï£ÍûÔÚActionViewÕ¹¿ªºÍºÏ²¢µÄʱºòÏÔʾ²»Í¬µÄ½çÃæ£¬ÆäʵÎÒÃÇÖ»ÐèҪȥע²áÒ»¸öActionViewµÄ¼àÌýÆ÷¾ÍÄÜʵÏÖÕâÑùµÄ¹¦ÄÜÁË£¬´úÂëÈçÏÂËùʾ£º

@Override  
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main, menu);
MenuItem searchItem = menu.findItem(R.id.action_search);
searchItem.setOnActionExpandListener(new OnActionExpandListener() {
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
Log.d("TAG", "on expand");
return true;
}

@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
Log.d("TAG", "on collapse");
return true;
}
});
return super.onCreateOptionsMenu(menu);
}

¿ÉÒÔ¿´µ½£¬µ÷ÓÃMenuItemµÄsetOnActionExpandListener()·½·¨¾Í¿ÉÒÔ×¢²áÒ»¸ö¼àÌýÆ÷ÁË£¬µ±SearchViewÕ¹¿ªµÄʱºò¾Í»á»Øµ÷onMenuItemActionExpand()·½·¨£¬µ±SearchViewºÏ²¢µÄʱºò¾Í»áµ÷ÓÃonMenuItemActionCollapse()·½·¨£¬ÎÒÃÇÔÚÕâÁ½¸ö·½·¨ÖнøÐÐÏàÓ¦µÄUI²Ù×÷¾Í¿ÉÒÔÁË¡£

Overflow°´Å¥²»ÏÔʾµÄÇé¿ö

ËäÈ»ÏÖÔÚÎÒÃÇÒѾ­ÕÆÎÕÁ˲»ÉÙActionBarµÄÓ÷¨£¬µ«Êǵ±ÄãÕæÕýȥʹÓÃËüµÄʱºò»¹ÊÇ¿ÉÄÜ»áÓöµ½¸÷ÖÖ¸÷ÑùµÄÎÊÌ⣬±ÈÈçºÜ¶àÈ˶¼»áÅöµ½overflow°´Å¥²»ÏÔʾµÄÇé¿ö¡£Ã÷Ã÷ÊÇͬÑùµÄÒ»·Ý´úÂ룬overflow°´Å¥ÔÚÓÐЩÊÖ»úÉÏ»áÏÔʾ£¬¶øÔÚÓÐЩÊÖ»úÉÏÆ«Æ«¾Í²»ÏÔʾ£¬ÕâÊÇÎªÊ²Ã´ÄØ£¿ºóÀ´ÎÒ×ܽáÁËһϣ¬overflow°´Å¥µÄÏÔʾÇé¿öºÍÊÖ»úµÄÓ²¼þÇé¿öÊÇÓйØÏµµÄ£¬Èç¹ûÊÖ»úûÓÐÎïÀíMenu¼üµÄ»°£¬overflow°´Å¥¾Í¿ÉÒÔÏÔʾ£¬Èç¹ûÓÐÎïÀíMenu¼üµÄ»°£¬overflow°´Å¥¾Í²»»áÏÔʾ³öÀ´¡£±ÈÈçÎÒÃÇÆô¶¯Ò»¸öÓÐMenu¼üµÄÄ£ÄâÆ÷£¬È»ºó½«´úÂëÔËÐе½¸ÃÄ£ÄâÆ÷ÉÏ£¬½á¹ûÈçÏÂͼËùʾ£º

¿ÉÒÔ¿´µ½£¬ActionBar×îÓұߵÄoverflow°´Å¥²»¼ûÁË£¡ÄÇô´ËʱÎÒÃÇÈçºÎ²é¿´Òþ²ØÔÚoverflowÖеÄAction°´Å¥ÄØ£¿Æäʵ·Ç³£¼òµ¥£¬°´Ò»ÏÂMenu¼ü£¬Òþ²ØµÄÄÚÈݾͻá´Óµ×²¿³öÀ´ÁË£¬ÈçÏÂͼËùʾ£º

¿´µ½ÕâÀïÏàÐŲ»ÉÙÅóÓѶ¼ÏëͲÛÒ»ÏÂÁË£¬ÕâÏÔÈ»ÊÇÒ»Öַdz£µ°ÌÛµÄÉè¼Æ£¬ÔÚ²»Í¬ÊÖ»úÉϾ¹È»ÏÔʾÁ˲»Í¬µÄ½çÃæ£¬¶øÇÒ²Ù×÷·½·¨Ò²ÍêÈ«²»Ò»Ñù£¬ÕâÑù»á¸øÓû§Ò»Öַdz£²»Ï°¹ßµÄ¸Ð¾õ¡£»°ËµGoogleΪʲôҪ°ÑActionBarµÄoverflowÉè¼Æ³ÉÕâÑùÎÒÒ²²»Ì«Àí½â£¬µ«ÊÇÎÒÃÇ»¹ÊÇÓа취¸Ä±äÕâһĬÈÏÐÐΪµÄ¡£

ʵ¼ÊÉÏ£¬ÔÚViewConfigurationÕâ¸öÀàÖÐÓÐÒ»¸ö½Ð×ösHasPermanentMenuKeyµÄ¾²Ì¬±äÁ¿£¬ÏµÍ³¾ÍÊǸù¾ÝÕâ¸ö±äÁ¿µÄÖµÀ´ÅжÏÊÖ»úÓÐûÓÐÎïÀíMenu¼üµÄ¡£µ±È»ÕâÊÇÒ»¸öÄÚ²¿±äÁ¿£¬ÎÒÃÇÎÞ·¨Ö±½Ó·ÃÎÊËü£¬µ«ÊÇ¿ÉÒÔͨ¹ý·´ÉäµÄ·½Ê½ÐÞ¸ÄËüµÄÖµ£¬ÈÃËüÓÀԶΪfalse¾Í¿ÉÒÔÁË£¬´úÂëÈçÏÂËùʾ£º

@Override  
protected void onCreate(Bundle savedInstanceState) {
......
setOverflowShowingAlways();
}

private void setOverflowShowingAlways() {
try {
ViewConfiguration config = ViewConfiguration.get(this);
Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
menuKeyField.setAccessible(true);
menuKeyField.setBoolean(config, false);
} catch (Exception e) {
e.printStackTrace();
}
}

ÕâÀïÎÒÃÇÔÚonCreate()·½·¨µÄ×îºóµ÷ÓÃÁËsetOverflowShowingAlways()·½·¨£¬¶øÕâ¸ö·½·¨µÄÄÚ²¿¾ÍÊÇʹÓ÷´ÉäµÄ·½Ê½½«sHasPermanentMenuKeyµÄÖµÉèÖóÉfalse£¬ÏÖÔÚÖØÐÂÔËÐÐһϴúÂ룬½á¹ûÈçÏÂͼËùʾ£º

¿ÉÒÔ¿´µ½£¬¼´Ê¹ÊÇÔÚÓÐMenu¼üµÄÊÖ»úÉÏ£¬Ò²ÄÜÈÃoverflow°´Å¥ÏÔʾ³öÀ´ÁË£¬ÕâÑù¾Í¿ÉÒÔ´ó´óÔö¼ÓÎÒÃÇÈí¼þ½çÃæºÍ²Ù×÷µÄͳһÐÔ¡£

ÈÃOverflowÖеÄÑ¡ÏîÏÔʾͼ±ê

Èç¹ûÄãµã»÷Ò»ÏÂoverflow°´Å¥È¥²é¿´Òþ²ØµÄAction°´Å¥£¬Äã»á·¢ÏÖÕⲿ·ÖAction°´Å¥¶¼ÊÇÖ»ÏÔʾÎÄ×Ö²»ÏÔʾͼ±êµÄ£¬ÈçÏÂͼËùʾ£º

ÕâÊǹٷ½µÄĬÈÏЧ¹û£¬GoogleÈÏΪÒþ²ØÔÚoverflowÖеÄAction°´Å¥¶¼Ó¦¸ÃÖ»ÏÔʾÎÄ×Ö¡£µ±È»£¬Èç¹ûÄãÈÏΪÕâÑù²»¹»ÃÀ¹Û£¬Ï£ÍûÔÚoverflowÖеÄAction°´Å¥Ò²¿ÉÒÔÏÔʾͼ±ê£¬ÎÒÃÇÈÔÈ»¿ÉÒÔÏë°ì·¨À´¸Ä±äÕâһĬÈÏÐÐΪ¡£

Æäʵ£¬overflowÖеÄAction°´Å¥Ó¦²»Ó¦¸ÃÏÔʾͼ±ê£¬ÊÇÓÉMenuBuilderÕâ¸öÀàµÄsetOptionalIconsVisible·½·¨À´¾ö¶¨µÄ£¬Èç¹ûÎÒÃÇÔÚoverflow±»Õ¹¿ªµÄʱºò¸øÕâ¸ö·½·¨´«Èëtrue£¬ÄÇôÀïÃæµÄÿһ¸öAction°´Å¥¶ÔÓ¦µÄͼ±ê¾Í¶¼»áÏÔʾ³öÀ´ÁË¡£µ÷Óõķ½·¨µ±È»ÈÔÈ»ÊÇÓ÷´ÉäÁË£¬´úÂëÈçÏÂËùʾ£º

@Override  
public boolean onMenuOpened(int featureId, Menu menu) {
if (featureId == Window.FEATURE_ACTION_BAR && menu != null) {
if (menu.getClass().getSimpleName().equals("MenuBuilder")) {
try {
Method m = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE);
m.setAccessible(true);
m.invoke(menu, true);
} catch (Exception e) {
}
}
}
return super.onMenuOpened(featureId, menu);
}

¿ÉÒÔ¿´µ½£¬ÕâÀïÎÒÃÇÖØÐ´ÁËÒ»¸öonMenuOpened()·½·¨£¬µ±overflow±»Õ¹¿ªµÄʱºò¾Í»á»Øµ÷Õâ¸ö·½·¨£¬½Ó×ÅÔÚÕâ¸ö·½·¨µÄÄÚ²¿Í¨¹ý·µ»Ø·´ÉäµÄ·½·¨½«MenuBuilderµÄsetOptionalIconsVisible±äÁ¿ÉèÖÃΪtrue¾Í¿ÉÒÔÁË¡£

ÏÖÔÚÖØÐÂÔËÐÐһϴúÂ룬½á¹ûÈçÏÂͼËùʾ£º

ºÃÁË£¬Ä¿Ç°ÎªÖ¹ÎÒÃÇÒѾ­°ÑActionBarµÄ»ù´¡ÖªÊ¶½éÉÜÍêÁË£¬ÄÇô½ñÌìµÄ½²½â¾Íµ½ÕâÀÏÂÆªÎÄÕÂÖÐÎÒ»á´øÁì´ó¼ÒÒ»Æð¸üÉîÈëµØÁ˽âActionBar¡£

Ìí¼ÓAction Provider

ºÍAction ViewÓеãÀàËÆ£¬Action ProviderÒ²¿ÉÒÔ½«Ò»¸öAction°´Å¥Ìæ»»³ÉÒ»¸ö×Ô¶¨ÒåµÄ²¼¾Ö¡£µ«²»Í¬µÄÊÇ£¬Action ProviderÄܹ»ÍêÈ«¿ØÖÆÊ¼þµÄËùÓÐÐÐΪ£¬²¢ÇÒ»¹¿ÉÒÔÔÚµã»÷µÄʱºòÏÔʾ×Ӳ˵¥¡£

ΪÁËÌí¼ÓÒ»¸öAction Provider£¬ÎÒÃÇÐèÒªÔÚ<item>±êÇ©ÖÐÖ¸¶¨Ò»¸öactionViewClassÊôÐÔ£¬ÔÚÀïÃæÌîÈëAction ProviderµÄÍêÕûÀàÃû¡£ÎÒÃÇ¿ÉÒÔͨ¹ý¼Ì³ÐActionProviderÀàµÄ·½Ê½À´´´½¨Ò»¸ö×Ô¼ºµÄAction Provider£¬Í¬Ê±£¬AndroidÒ²ÌṩºÃÁ˼¸¸öÄÚÖõÄAction Provider£¬±ÈÈç˵ShareActionProvider¡£

ÓÉÓÚÿ¸öAction Provider¶¼¿ÉÒÔ×ÔÓɵؿØÖÆÊ¼þÏìÓ¦£¬ËùÒÔËüÃDz»ÐèÒªÔÚonOptionsItemSelected()·½·¨ÖÐÔÙÈ¥¼àÌýµã»÷ʼþ£¬¶øÊÇÓ¦¸ÃÔÚonPerformDefaultAction()·½·¨ÖÐÈ¥Ö´ÐÐÏàÓ¦µÄÂß¼­¡£

ÄÇôÎÒÃǾÍÏÈÀ´¿´Ò»ÏÂShareActionProviderµÄ¼òµ¥Ó÷¨°É£¬±à¼­menu×ÊÔ´Îļþ£¬ÔÚÀïÃæ¼ÓÈëShareActionProviderµÄÉùÃ÷£¬ÈçÏÂËùʾ£º

<menu xmlns:android="http://schemas.android.com/apk/res/android"  
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.example.actionbartest.MainActivity" >

<item
android:id="@+id/action_share"
android:actionProviderClass="android.widget.ShareActionProvider"
android:showAsAction="ifRoom"
android:title="@string/action_share" />
......

</menu>

×¢Ò⣬ShareActionProvider»á×Ô¼º´¦ÀíËüµÄÏÔʾºÍʼþ£¬µ«ÎÒÃÇÈÔȻҪ¼ÇµÃ¸øËüÌí¼ÓÒ»¸ötitle£¬ÒÔ·ÀÖ¹Ëü»áÔÚoverflowµ±ÖгöÏÖ¡£
½Ó×ÅʣϵÄÊÂÇé¾ÍÊÇͨ¹ýIntentÀ´¶¨Òå³öÄãÏë·ÖÏíÄÄЩ¶«Î÷ÁË£¬ÎÒÃÇÖ»ÐèÒªÔÚonCreateOptionsMenu()Öе÷ÓÃMenuItemµÄgetActionProvider()·½·¨À´µÃµ½¸ÃShareActionProvider¶ÔÏó£¬ÔÙͨ¹ýsetShareIntent()·½·¨È¥Ñ¡Ôñ¹¹½¨³öʲôÑùµÄÒ»¸öIntent¾Í¿ÉÒÔÁË¡£´úÂëÈçÏÂËùʾ£º

@Override  
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main, menu);
MenuItem shareItem = menu.findItem(R.id.action_share);
ShareActionProvider provider = (ShareActionProvider) shareItem.getActionProvider();
provider.setShareIntent(getDefaultIntent());
......
return super.onCreateOptionsMenu(menu);
}

private Intent getDefaultIntent() {
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("image/*");
return intent;
}

¿ÉÒÔ¿´µ½£¬ÕâÀïÎÒÃÇͨ¹ýgetDefaultIntent()·½·¨À´¹¹½¨ÁËÒ»¸öIntent£¬¸ÃIntent±íʾ»á½«ËùÓпÉÒÔ¹²ÏíͼƬµÄ³Ì¶È¶¼ÁгöÀ´¡£ÖØÐÂÔËÐÐһϳÌÐò£¬Ð§¹ûÈçÏÂͼËùʾ£º

ϸÐĵÄÄãÒ»¶¨¹Û²ìµ½ÁË£¬Õâ¸öShareActionProviderµã»÷Ö®ºóÊÇ¿ÉÒÔÕ¹¿ªµÄ£¬ÓеãÀàËÆÓÚoverflowµÄЧ¹û£¬Õâ¾ÍÊÇAction ProviderµÄ×Ӳ˵¥¡£³ýÁËʹÓÃShareActionProviderÖ®Í⣬ÎÒÃÇÒ²¿ÉÒÔ×Ô¶¨ÒåÒ»¸öAction Provider£¬±ÈÈç˵Èç¹ûÏëÒª½¨Á¢Ò»¸öÓµÓÐÁ½Ïî×Ӳ˵¥µÄAction Provider£¬¾Í¿ÉÒÔÕâÑùд£º

public class MyActionProvider extends ActionProvider {  

public MyActionProvider(Context context) {
super(context);
}

@Override
public View onCreateActionView() {
return null;
}

@Override
public void onPrepareSubMenu(SubMenu subMenu) {
subMenu.clear();
subMenu.add("sub item 1").setIcon(R.drawable.ic_launcher)
.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
return true;
}
});
subMenu.add("sub item 2").setIcon(R.drawable.ic_launcher)
.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
return false;
}
});
}

@Override
public boolean hasSubMenu() {
return true;
}

}

ÕâÀïÎÒÃÇн¨ÁËÒ»¸öMyActionProvider¼Ì³Ð×ÔActionProvider£¬ÎªÁ˱íʾÕâ¸öAction ProviderÊÇÓÐ×Ӳ˵¥µÄ£¬ÐèÒªÖØÐ´hasSubMenu()·½·¨²¢·µ»Øtrue£¬È»ºóÔÚonPrepareSubMenuͨ¹ýµ÷ÓÃSubMenuµÄadd()·½·¨Ìí¼Ó×Ӳ˵¥¡£

½Ó×ÅÐÞ¸Ämenu×ÊÔ´£¬ÔÚÀïÃæ¼ÓÈëMyActionProviderµÄÉùÃ÷£º

<menu xmlns:android="http://schemas.android.com/apk/res/android"  
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.example.actionbartest.MainActivity" >

<item
android:id="@+id/action_share"
android:actionProviderClass="com.example.actionbartest.MyActionProvider"
android:icon="@drawable/ic_launcher"
android:showAsAction="ifRoom"
android:title="@string/action_share" />
......

</menu>

ÏÖÔÚÖØÐÂÔËÐÐһϴúÂ룬½á¹ûÈçͼËùʾ£º

Ìí¼Óµ¼º½Tabs

TabsµÄÓ¦ÓÿÉÒÔËãÊǷdz£¹ã·ºÁË£¬Ëü¿ÉÒÔʹµÃÓû§·Ç³£ÇáËɵØÔÚÄãµÄÓ¦ÓóÌÐòÖÐÇл»²»Í¬µÄÊÓͼ¡£¶øAndroid¹Ù·½¸ü¼ÓÍÆ¼öʹÓÃActionBarÖÐÌṩµÄTabs¹¦ÄÜ£¬ÒòΪËü¸ü¼ÓµÄÖÇÄÜ£¬¿ÉÒÔ×Ô¶¯ÊÊÅä¸÷ÖÖÆÁÄ»µÄ´óС¡£±ÈÈç˵£¬ÔÚÆ½°åÉÏÆÁÄ»µÄ¿Õ¼ä·Ç³£³ä×㣬Tabs»áºÍAction°´Å¥ÔÚͬһÐÐÏÔʾ£¬ÈçÏÂͼËùʾ£º

¶øÈç¹ûÊÇÔÚÊÖ»úÉÏ£¬ÆÁÄ»µÄ¿Õ¼ä²»¹»´óµÄ»°£¬TabsºÍAction°´Å¥Ôò»á·ÖΪÁ½ÐÐÏÔʾ£¬ÈçÏÂͼËùʾ£º

ÏÂÃæÎÒÃǾÍÀ´¿´Ò»ÏÂÈçºÎʹÓÃActionBarÌṩµÄTab¹¦ÄÜ£¬´óÖ¿ÉÒÔ·ÖΪÒÔϼ¸²½£º

1. ʵÏÖActionBar.TabListener½Ó¿Ú£¬Õâ¸ö½Ó¿ÚÌṩÁËTabʼþµÄ¸÷Öֻص÷£¬±ÈÈçµ±Óû§µã»÷ÁËÒ»¸öTabʱ£¬Äã¾Í¿ÉÒÔ½øÐÐÇл»TabµÄ²Ù×÷¡£

2.Ϊÿһ¸öÄãÏëÌí¼ÓµÄTab´´½¨Ò»¸öActionBar.TabµÄʵÀý£¬²¢ÇÒµ÷ÓÃsetTabListener()·½·¨À´ÉèÖÃActionBar.TabListener¡£³ý´ËÖ®Í⣬»¹ÐèÒªµ÷ÓÃsetText()·½·¨À´¸øµ±Ç°TabÉèÖñêÌâ¡£

3.×îºóµ÷ÓÃActionBarµÄaddTab()·½·¨½«´´½¨ºÃµÄTabÌí¼Óµ½ActionBarÖС£

¿´ÆðÀ´²¢²»¸´ÔÓ£¬×ܹ²¾ÍÖ»ÓÐÈý²½£¬ÄÇôÎÒÃÇÏÖÔÚ¾ÍÀ´³¢ÊÔһϰɡ£Ê×ÏȵÚÒ»²½ÐèÒª´´½¨Ò»¸öʵÏÖActionBar.TabListener½Ó¿ÚµÄÀ࣬´úÂëÈçÏÂËùʾ£º

public class TabListener<T extends Fragment> implements ActionBar.TabListener {  
private Fragment mFragment;
private final Activity mActivity;
private final String mTag;
private final Class<T> mClass;

public TabListener(Activity activity, String tag, Class<T> clz) {
mActivity = activity;
mTag = tag;
mClass = clz;
}

public void onTabSelected(Tab tab, FragmentTransaction ft) {
if (mFragment == null) {
mFragment = Fragment.instantiate(mActivity, mClass.getName());
ft.add(android.R.id.content, mFragment, mTag);
} else {
ft.attach(mFragment);
}
}

public void onTabUnselected(Tab tab, FragmentTransaction ft) {
if (mFragment != null) {
ft.detach(mFragment);
}
}

public void onTabReselected(Tab tab, FragmentTransaction ft) {
}
}

Õâ¶Î´úÂë²¢²»³¤£¬ÎÒÃǼòµ¥·ÖÎöһϡ£µ±Tab±»Ñ¡ÖеÄʱºò»áµ÷ÓÃonTabSelected()·½·¨£¬ÔÚÕâÀïÎÒÃÇÏÈÅжÏmFragmentÊÇ·ñΪ¿Õ£¬Èç¹ûΪ¿ÕµÄ»°¾Í´´½¨FragmentµÄʵÀý²¢µ÷ÓÃFragmentTransactionµÄadd()·½·¨£¬Èç¹û²»»á¿ÕµÄ»°¾Íµ÷ÓÃFragmentTransactionµÄattach()·½·¨¡£

¶øµ±TabûÓб»Ñ¡ÖеÄʱºò£¬Ôòµ÷ÓÃFragmentTransactionµÄdetach()·½·¨£¬½«UI×ÊÔ´Êͷŵô¡£

µ±Tab±»ÖØÐÂÑ¡ÖеÄʱºò»áµ÷ÓÃonTabReselected()·½·¨£¬Èç¹ûûÓÐÌØÊâÐèÇóµÄ»°£¬Í¨³£ÊDz»ÐèÒª½øÐд¦ÀíµÄ¡£

½ÓÏÂÀ´µÚ¶þ²½Òª¸øÃ¿Ò»¸öTab´´½¨Ò»¸öActionBar.TabµÄʵÀý£¬ÔÚ´Ë֮ǰҪÏÈ×¼±¸ºÃÿ¸öTabÒ³¶ÔÓ¦µÄFragment¡£±ÈÈç˵ÕâÀïÎÒÃÇÏë´´½¨Á½¸öTabÒ³£¬ArtistºÍAlbum£¬ÄǾÍÒªÏÈ×¼±¸ºÃÕâÁ½¸öTabÒ³¶ÔÓ¦µÄFragment¡£Ê×ÏÈн¨ArtistFragment£¬´úÂëÈçÏÂËùʾ£º

public class ArtistFragment extends Fragment {  

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
TextView textView = new TextView(getActivity());
textView.setText("Artist Fragment");
textView.setGravity(Gravity.CENTER_HORIZONTAL);
LinearLayout layout = new LinearLayout(getActivity());
LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
layout.addView(textView, params);
return layout;
}

}

ûÓÐʲôʵÖÊÐԵĴúÂ룬ֻÊÇÔÚTextViewÖÐÏÔʾÁËArtist FragmentÕâ¸ö×Ö·û´®¡£

È»ºóÈç·¨ÅÚÖÆ£¬Ð½¨AlbumFragment£¬´úÂëÈçÏÂËùʾ£º

public class AlbumFragment extends Fragment {  

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
TextView textView = new TextView(getActivity());
textView.setText("Album Fragment");
textView.setGravity(Gravity.CENTER_HORIZONTAL);
LinearLayout layout = new LinearLayout(getActivity());
LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
layout.addView(textView, params);
return layout;
}

}

Fragment¶¼×¼±¸ºÃÁËÖ®ºó£¬½ÓÏÂÀ´¾Í¿ÉÒÔ¿ªÊ¼´´½¨TabʵÀýÁË£¬´´½¨ºÃÁËÖ®ºóÔòÔÙµ÷ÓÃaddTab()·½·¨Ìí¼Óµ½ActionBarµ±ÖУ¬ÕâÁ½²½Í¨³£¶¼ÊÇÔÚActivityµÄonCreate()·½·¨ÖÐÖ´Ðе쬴úÂëÈçÏ£º

@Override  
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTitle("ÌìÆø");
ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
setOverflowShowingAlways();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
Tab tab = actionBar
.newTab()
.setText(R.string.artist)
.setTabListener(
new TabListener<ArtistFragment>(this, "artist",
ArtistFragment.class));
actionBar.addTab(tab);
tab = actionBar
.newTab()
.setText(R.string.album)
.setTabListener(
new TabListener<AlbumFragment>(this, "album",
AlbumFragment.class));
actionBar.addTab(tab);
}

¿ÉÒÔ¿´µ½£¬ÕâÀïÊÇʹÓÃÁ¬×ºµÄд·¨À´´´½¨TabµÄ¡£Ê×Ïȵ÷ÓÃActionBarµÄnewTab()·½·¨À´´´½¨Ò»¸öTabʵÀý£¬½Ó×ŵ÷ÓÃÁËsetText()·½·¨À´ÉèÖñêÌ⣬ȻºóÔÙµ÷ÓÃsetTabListener()·½·¨À´ÉèÖÃʼþ¼àÌýÆ÷£¬×îºóÔÙµ÷ÓÃActionBarµÄaddTab()·½·¨½«TabÌí¼Óµ½ActionBarÖС£

ºÃÁË£¬ÕâÑùµÄ»°´úÂë¾Í±àдÍêÁË£¬ÖØÐÂÔËÐÐһϳÌÐò£¬Ð§¹ûÈçÏÂͼËùʾ£º

×Ô¶¨ÒåActionBarÑùʽ

Ëä˵ActionBar¸øÓû§ÌṩÁËÒ»ÖÖÈ«¾ÖͳһµÄ½çÃæ·ç¸ñºÍ²Ù×÷·½Ê½£¬µ«Õâ²¢²»Òâζ×ÅËùÓÐÓ¦ÓóÌÐòµÄActionBar¶¼±ØÐëÒª³¤µÃһģһÑù¡£Èç¹ûÄãÐèÒªÐÞ¸ÄActionBarµÄÑùʽÀ´¸ü¼ÓºÃµØÊÊÅäÄãµÄÓ¦Ó㬿ÉÒԷdz£¼òµ¥µØÍ¨¹ýAndroidÑùʽºÍÖ÷ÌâÀ´ÊµÏÖ¡£

ÆäʵAndroidÄÚÖõöActivityÖ÷ÌâÖоÍÒѾ­°üº¬ÁË"dark"»ò"light"ÕâÑùµÄActionBarÑùʽÁË£¬Í¬Ê±ÄãÒ²¿ÉÒԼ̳ÐÕâЩÖ÷Ì⣬Ȼºó½øÐиüÉîÒ»²½µÄ¶¨ÖÆ¡£

1. ʹÓÃÖ÷Ìâ

AndroidÖÐÓÐÁ½¸ö×î»ù±¾µÄActivityÖ÷Ìâ¿ÉÒÔÓÃÓÚÖ¸¶¨ActionBarµÄÑÕÉ«£¬·Ö±ðÊÇ£º

Theme.Holo£¬ÕâÊÇÒ»¸öÉîɫϵµÄÖ÷Ìâ¡£

Theme.Holo.Light£¬ÕâÊÇÒ»¸ödzɫϵµÄÖ÷Ìâ¡£

ÉîɫϵÖ÷ÌâÑùʽµÄЧ¹ûÈçÏÂͼËùʾ£º

dzɫϵÖ÷ÌâÑùʽµÄЧ¹ûÈçÏÂͼËùʾ£º

Äã¿ÉÒÔ½«ÕâЩÖ÷ÌâÓ¦Óõ½ÄãµÄÕû¸öÓ¦ÓóÌÐò£¬Ò²¿ÉÒÔÖ»Ó¦ÓÃÓÚij¸öActivity¡£Í¨¹ýÔÚAndroidManifest.xmlÎļþÖиø<application>»ò<activity>±êǩָ¶¨android:themeÊôÐԾͿÉÒÔʵÏÖÁË¡£±ÈÈ磺

<application android:theme="@android:style/Theme.Holo.Light" ... />  

Èç¹ûÄãÖ»ÏëÈÃActionBarʹÓÃÉîɫϵµÄÖ÷Ì⣬¶øActivityµÄÄÚÈݲ¿·ÖÈÔȻʹÓÃdzɫϵµÄÖ÷Ì⣬¿ÉÒÔͨ¹ýÉùÃ÷Theme.Holo.Light.DarkActionBarÕâ¸öÖ÷ÌâÀ´ÊµÏÖ£¬Ð§¹ûÈçÏÂͼËùʾ£º

2. ×Ô¶¨Òå±³¾°

Èç¹ûÏëÒªÐÞ¸ÄActionBarµÄ±³¾°£¬ÎÒÃÇ¿ÉÒÔͨ¹ý´´½¨Ò»¸ö×Ô¶¨ÒåÖ÷Ìâ²¢ÖØÐ´actionBarStyleÊôÐÔÀ´ÊµÏÖ¡£Õâ¸öÊôÐÔ¿ÉÒÔÖ¸ÏòÁíÍâÒ»¸öÑùʽ£¬È»ºóÎÒÃÇÔÚÕâ¸öÑùʽÖÐÖØÐ´backgroundÕâ¸öÊôÐԾͿÉÒÔÖ¸¶¨Ò»¸ödrawable×ÊÔ´»òÑÕÉ«£¬´Ó¶øÊµÏÖ×Ô¶¨Òå±³¾°µÄ¹¦ÄÜ¡£

±à¼­styles.xmlÎļþ£¬ÔÚÀïÃæ¼ÓÈëÒ»¸ö×Ô¶¨ÒåµÄÖ÷Ì⣬ÈçÏÂËùʾ£º

<resources>  

<style name="CustomActionBarTheme" parent="@android:style/Theme.Holo.Light">
<item name="android:actionBarStyle">@style/MyActionBar</item>
</style>

<style name="MyActionBar" parent="@android:style/Widget.Holo.Light.ActionBar">
<item name="android:background">#f4842d</item>
</style>

</resources>

¿ÉÒÔ¿´µ½£¬ÕâÀïÎÒÃǶ¨ÒåÁËÒ»¸öCustomActionBarThemeÖ÷Ì⣬²¢ÈÃËü¼Ì³Ð×ÔTheme.Holo.Light¡£È»ºóÔÚÆäÄÚ²¿ÖØÐ´ÁËactionBarStyleÕâ¸öÊôÐÔ£¬È»ºó½«Õâ¸öÊôÐÔÖ¸ÏòÁËMyActionBarÕâ¸öÑùʽ£¬ÎÒÃÇÔÚÕâ¸öÑùʽÖÐÓÖÖØÐ´ÁËbackgroundÊôÐÔ£¬²¢¸øËüÖ¸¶¨ÁËÒ»¸ö±³¾°É«¡£

ÏÖÔÚÖØÐÂÔËÐÐһϳÌÐò£¬Ð§¹ûÈçÏÂͼËùʾ£º

ÕâÑùÎÒÃǾͳɹ¦ÐÞ¸ÄActionBarµÄ±³¾°É«ÁË¡£²»¹ýÏÖÔÚ¿´ÉÏÈ¥»¹Óеã¹Ö¹ÖµÄ£¬ÒòΪֻÊÇActionBarµÄ±³¾°É«¸Ä±äÁË£¬TabsµÄ±³¾°É«»¹ÊÇÔ­À´µÄÑù×Ó£¬ÕâÑù¾Í¸Ð¾õ²»Ì«Ð­µ÷¡£ÄÇôÏÂÃæÎÒÃÇÂíÉϾÍÀ´ÐÞ¸ÄÒ»ÏÂTabsµÄ±³¾°É«£¬±à¼­styles.xmlÎļþ£¬ÈçÏÂËùʾ£º

<resources>  

<style name="CustomActionBarTheme" parent="@android:style/Theme.Holo.Light">
<item name="android:actionBarStyle">@style/MyActionBar</item>
</style>

<style name="MyActionBar" parent="@android:style/Widget.Holo.Light.ActionBar">
<item name="android:background">#f4842d</item>
<item name="android:backgroundStacked">#d27026</item>
</style>

</resources>

¿ÉÒÔ¿´µ½£¬ÕâÀïÓÖÖØÐ´ÁËbackgroundStackedÊôÐÔ£¬Õâ¸öÊôÐÔ¾ÍÊÇÓÃÓÚÖ¸¶¨Tabs±³¾°É«µÄ¡£ÄÇôÔÙ´ÎÖØÐÂÔËÐгÌÐò£¬Ð§¹ûÈçÏÂͼËùʾ£º

3. ×Ô¶¨ÒåÎÄ×ÖÑÕÉ«

ÏÖÔÚÕû¸öActionBarµÄÑÕÉ«ÊÇÊôÓÚÆ«°µÏµµÄ£¬¶øActionBarÖÐÎÄ×ÖµÄÑÕÉ«ÓÖÆ«Æ«ÊǺÚÉ«µÄ£¬ËùÒÔ¿´ÆðÀ´²¢²»Êæ·þ£¬ÄÇô½ÓÏÂÀ´ÎÒÃǾÍѧϰһÏÂÈç¹û×Ô¶¨ÒåÎÄ×ÖÑÕÉ«£¬½«ÎÄ×ÖÑÕÉ«¸Ä³É°×É«¡£

ÐÞ¸Ästyles.xmlÎļþ£¬ÈçÏÂËùʾ£º

<resources>  

......

<style name="MyActionBar" parent="@android:style/Widget.Holo.Light.ActionBar">
......
<item name="android:titleTextStyle">@style/MyActionBarTitleText</item>
</style>

<style name="MyActionBarTitleText" parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title">
<item name="android:textColor">#fff</item>
</style>

</resources>

¿ÉÒÔ¿´µ½£¬ÕâÀïÔÚMyActionBarÑùʽÀïÃæÖØÐ´ÁËtitleTextStyleÊôÐÔ£¬²¢½«ËüÖ¸ÏòÁËÁíÒ»¸ö×Ô¶¨ÒåÑùʽMyActionBarTitleText£¬½Ó×ÅÎÒÃÇÔÚÕâ¸öÑùʽÖÐÖ¸¶¨textColorµÄÑÕÉ«ÊÇ#fff£¬Ò²¾ÍÊǰ×É«¡£

ÏÖÔÚÖØÐÂÔËÐÐһϳÌÐò£¬½á¹ûÈçÏÂͼËùʾ£º

OK£¬ActionBar±êÌâÎÄ×ÖµÄÑÕÉ«ÒѾ­³É¹¦¸Ä³É°×É«ÁË£¬ÄÇTab±êÌâµÄÎÄ×ÖÓÖ¸ÃÔõôÐÞ¸ÄÄØ£¿¼ÌÐø±à¼­styles.xmlÎļþ£¬ÈçÏÂËùʾ£º

<resources>  

<style name="CustomActionBarTheme" parent="@android:style/Theme.Holo.Light">
<item name="android:actionBarStyle">@style/MyActionBar</item>
<item name="android:actionBarTabTextStyle">@style/MyActionBarTabText</item>
</style>

<style name="MyActionBarTabText"
parent="@android:style/Widget.Holo.ActionBar.TabText">
<item name="android:textColor">#fff</item>
</style>

</resources>

ÕâÀïÎÒÃÇÔÚCustomActionBarThemeÖ÷ÌâÖÐÖØÐ´actionBarTabTextStyleÊôÐÔ£¬²¢½«ËüÖ¸ÏòÒ»¸öн¨µÄMyActionBarTabTextÑùʽ£¬È»ºóÔÚÕâ¸öÑùʽÖÐÖØÐ´textColorÊôÐÔ£¬½«ÑÕɫָ¶¨Îª°×É«¼´¿É¡£

ÖØÐÂÔËÐÐһϳÌÐò£¬½á¹ûÈçÏÂͼËùʾ£º

4. ×Ô¶¨ÒåTab Indicator

ΪÁË¿ÉÒÔÃ÷È··Ö±æ³öÎÒÃǵ±Ç°Ñ¡ÖеÄÊÇÄÄÒ»¸öTabÏͨ³£Çé¿ö϶¼»áÔÚÑ¡ÖÐTabµÄÏÂÃæ¼ÓÉÏÒ»ÌõºáÏß×÷Ϊ±êʶ£¬Õâ±»³Æ×÷Tab Indicator¡£ÄÇôÉÏͼÖеÄTab IndicatorÊÇÀ¶É«µÄ£¬Ã÷ÏÔºÍÕûÌå·ç¸ñ²»Ïà·û£¬ËùÒÔÎÒÃǽÓÏÂÀ´¾ÍѧϰһÏÂÈçºÎ×Ô¶¨ÒåTab Indicator¡£

Ê×ÏÈÎÒÃÇÐèÒªÖØÐ´actionBarTabStyleÕâ¸öÊôÐÔ£¬È»ºó½«ËüÖ¸ÏòÒ»¸öн¨µÄTabÑùʽ£¬È»ºóÖØÐ´backgroundÕâ¸öÊôÐÔ¼´¿É¡£ÐèҪעÒâµÄÊÇ£¬background±ØÐëÒªÖ¸¶¨Ò»¸östate-list drawableÎļþ£¬ÕâÑùÔÚ¸÷ÖÖ²»Í¬×´Ì¬Ï²ÅÄÜÏÔʾ³ö²»Í¬µÄЧ¹û¡£

ÄÇôÔÚ¿ªÊ¼Ö®Ç°£¬Ê×ÏÈÎÒÃÇÐèҪ׼±¸ËÄÕÅͼƬ£¬·Ö±ðÓÃÓÚ±íʾTabµÄËÄÖÖ״̬£¬ÈçÏÂËùʾ£º

ÕâËÄÕÅͼƬ·Ö±ð±íʾTabÑ¡ÖÐδ°´Ï£¬Ñ¡ÖÐÇÒ°´Ï£¬Î´Ñ¡ÖÐδ°´Ï£¬Î´Ñ¡ÖÐÇÒ°´ÏÂÕâËÄÖÖ״̬£¬ÄÇô½Ó×Åн¨res/drawable/actionbar_tab_indicator.xmlÎļþ£¬´úÂëÈçÏÂËùʾ£º

<?xml version="1.0" encoding="utf-8"?>  
<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:state_selected="false"
android:state_pressed="false"
android:drawable="@drawable/tab_unselected" />
<item android:state_selected="true"
android:state_pressed="false"
android:drawable="@drawable/tab_selected" />
<item android:state_selected="false"
android:state_pressed="true"
android:drawable="@drawable/tab_unselected_pressed" />
<item android:state_selected="true"
android:state_pressed="true"
android:drawable="@drawable/tab_selected_pressed" />

</selector>

ËÄÖÖ״̬·Ö±ðÒýÓÃÁËËÄÕÅͼƬ£¬ÕâÑù¾Í°Ñstate-list drawableÎļþдºÃÁË¡£½Ó×ÅÐÞ¸Ästyle.xmlÎļþ£¬´úÂëÈçÏÂËùʾ£º

<resources>  

<style name="CustomActionBarTheme" parent="@android:style/Theme.Holo.Light">
......
<item name="android:actionBarTabStyle">@style/MyActionBarTabs</item>
</style>

<style name="MyActionBarTabs" parent="@android:style/Widget.Holo.ActionBar.TabView">
<item name="android:background">@drawable/actionbar_tab_indicator</item>
</style>

</resources>

ÕâÀïÏÈÊÇÖØÐ´ÁËactionBarTabStyleÕâ¸öÊôÐÔ£¬²¢½«ËüÖ¸ÏòÁËÁíÒ»¸ö×Ô¶¨ÒåÑùʽMyActionBarTabs£¬½Ó×ÅÔÚÕâ¸öÑùʽÖÐÖØÐ´backgroundÊôÐÔ£¬È»ºóÖ¸ÏòÎÒÃǸղŴ´½¨µÄactionbar_tab_indicator¼´¿É¡£

ÏÖÔÚÖØÐÂÔËÐÐһϳÌÐò£¬Ð§¹ûÈçÏÂËùʾ£º

¿ÉÒÔ¿´µ½£¬Tab IndicatorµÄÑÕÉ«ÒѾ­±ä³ÉÁ˰×É«£¬ÕâÑù¿´ÉÏÈ¥¾ÍЭµ÷µÃ¶àÁË¡£

³ý´ËÖ®Í⣬Action Bar»¹ÓÐÐíÐí¶à¶àµÄÊôÐÔ¿ÉÒÔ½øÐÐ×Ô¶¨Ò壬ÕâÀïÎÒÃÇÎÞ·¨Ò»Ò»º­¸Çµ½±¾ÆªÎÄÕÂÖУ¬¸ü¶àµÄ×Ô¶¨ÒåÊôÐÔÇë²Î¿¼¹Ù·½Îĵµ½øÐÐѧϰ¡£

ºÃÁË£¬±¾ÆªÎÄÕµĽ²½â¾Íµ½ÕâÀ½áºÏÉÏÏÂÁ½Æª£¬ÎÒÃÇÒѾ­°ÑActionBarÖÐ×î³£ÓõŦÄܶ¼Ñ§»áÁË£¬ÏÂÆªÎÄÕÂÖÐÎÒ»á´øÁì´ó¼ÒÒ»ÆðʵսAction BarµÄÓ÷¨£¬¸ÐÐËȤµÄÅóÓÑÇë¼ÌÐøÔĶÁ Android ActionBarÓ¦ÓÃʵս£¬¸ß·Â΢ÐÅÖ÷½çÃæµÄÉè¼Æ ¡£

   
6627 ´Îä¯ÀÀ       29
 
Ïà¹ØÎÄÕÂ

ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖÓë̽ÌÖ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
 
Ïà¹ØÎĵµ

Android_UI¹Ù·½Éè¼Æ½Ì³Ì
ÊÖ»ú¿ª·¢Æ½Ì¨½éÉÜ
androidÅÄÕÕ¼°ÉÏ´«¹¦ÄÜ
Android½²ÒåÖÇÄÜÊÖ»ú¿ª·¢
Ïà¹Ø¿Î³Ì

Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
Androidϵͳ¿ª·¢
AndroidÓ¦Óÿª·¢
ÊÖ»úÈí¼þ²âÊÔ
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

androidÈË»ú½çÃæÖ¸ÄÏ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
AndroidÊÖ»ú¿ª·¢£¨¶þ£©
AndroidÊÖ»ú¿ª·¢£¨Èý£©
AndroidÊÖ»ú¿ª·¢£¨ËÄ£©
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖ̽ÌÖ
ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
ÊÖ»úÈí¼þ×Ô¶¯»¯²âÊÔÑо¿±¨¸æ


Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
AndroidÓ¦Óÿª·¢
Androidϵͳ¿ª·¢
ÊÖ»úÈí¼þ²âÊÔ
ǶÈëʽÈí¼þ²âÊÔ
AndroidÈí¡¢Ó²¡¢ÔÆÕûºÏ


ÁìÏÈIT¹«Ë¾ android¿ª·¢Æ½Ì¨×î¼Ñʵ¼ù
±±¾© Android¿ª·¢¼¼Êõ½ø½×
ijÐÂÄÜÔ´ÁìÓòÆóÒµ Android¿ª·¢¼¼Êõ
ijº½Ì칫˾ Android¡¢IOSÓ¦ÓÃÈí¼þ¿ª·¢
°¢¶û¿¨ÌØ LinuxÄÚºËÇý¶¯
°¬Ä¬Éú ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
Î÷ÃÅ×Ó Ç¶Èëʽ¼Ü¹¹Éè¼Æ