Android_ActionBar

From:http://blog.csdn.net/tianjf0514/article/details/13246075

简介

Android3.0之后出现了ActionBar,一种全新的UI设计风格。

Android官网为了使开发者更加了解新UI设计风格,也专门给出了一个板块来介绍design的东西,其中也有ActionBar(http://developer.android.com/design/patterns/actionbar.html)。

一个简单的ActionBarDemo

1、创建一个名为ActionBarDemo的Android项目。

2、修改menu文件夹下的menu文件,目的是在ActionBar上添加两个item:

[html] view plain copy print ?
  1. <menu xmlns:android="http://schemas.android.com/apk/res/android" >  
  2.   
  3.     <item  
  4.         android:id="@+id/action_add"  
  5.         android:icon="@android:drawable/ic_menu_add"  
  6.         android:showAsAction="always"  
  7.         android:title="@string/action_add"/>  
  8.     <item  
  9.         android:id="@+id/action_delete"  
  10.         android:icon="@android:drawable/ic_menu_delete"  
  11.         android:showAsAction="always"  
  12.         android:title="@string/action_delete"/>  
  13.   
  14. </menu>  

3、在Activity里面添加onCreateOptionsMenu方法:

[java] view plain copy print ?
  1. @Override  
  2.     public boolean onCreateOptionsMenu(Menu menu) {  
  3.         getMenuInflater().inflate(R.menu.main, menu);  
  4.         return true;  
  5.     }  

这样一个最简单的ActionBarDemo就好了,运行一下如下图:

Android_ActionBar_第1张图片

ActionBar的Overflow按钮

什么是Overflow按钮?请看下图:

怎么显示Overflow按钮?请看如下代码:

[html] view plain copy print ?
  1. <item  
  2.         android:id="@+id/action_settings"  
  3.         android:showAsAction="never"  
  4.         android:title="@string/action_settings"/>  

只要设置android:showAsAction为never就OK了。

但是有的手机上面设置了never之后还是显示不出来Overflow按钮,解决办法如下:

在Activity里面添加如下forceShowOverflowMenu方法,然后在onCreate里面调用。

[java] view plain copy print ?
  1. private void forceShowOverflowMenu() {  
  2.     try {  
  3.         ViewConfiguration config = ViewConfiguration.get(this);  
  4.         Field menuKeyField = ViewConfiguration.class  
  5.                 .getDeclaredField("sHasPermanentMenuKey");  
  6.         if (menuKeyField != null) {  
  7.             menuKeyField.setAccessible(true);  
  8.             menuKeyField.setBoolean(config, false);  
  9.         }  
  10.     } catch (Exception e) {  
  11.         e.printStackTrace();  
  12.     }  
  13. }  

Split Action Bar

当要显示的Action Bar Item很多而显示不下的时候,就需要使用Split Action Bar。

方法:在activity标签里面添加android:uiOptions="splitActionBarWhenNarrow"即可。

运行效果如下:

Android_ActionBar_第2张图片

下面的两个item没有平均分配空间,如果想要平局分配,代码如下:

[html] view plain copy print ?
  1. <menu xmlns:android="http://schemas.android.com/apk/res/android" >  
  2.   
  3.     <item  
  4.         android:checkable="false"  
  5.         android:enabled="false"  
  6.         android:showAsAction="always"/>  
  7.     <item  
  8.         android:id="@+id/action_share"  
  9.         android:icon="@android:drawable/ic_menu_share"  
  10.         android:showAsAction="ifRoom|withText"  
  11.         android:title="@string/action_share"/>  
  12.     <item  
  13.         android:checkable="false"  
  14.         android:enabled="false"  
  15.         android:showAsAction="always"/>  
  16.     <item  
  17.         android:id="@+id/action_search"  
  18.         android:icon="@android:drawable/ic_menu_search"  
  19.         android:showAsAction="ifRoom|withText"  
  20.         android:title="@string/action_search"/>  
  21.     <item  
  22.         android:checkable="false"  
  23.         android:enabled="false"  
  24.         android:showAsAction="always"/>  
  25.   
  26. </menu>  

就是在中间添加看不见的item就可以实现了。效果图如下:


Up Navigation

Up Navigation就是点击ActionBar的左边的按钮回到上一个Activity。

方法:

1、在Manifest里面添加上级Activity

[html] view plain copy print ?
  1. <activity  
  2.     android:name=".UpNavigationActivity"  
  3.     android:label="@string/up_navigation_activity_name"  
  4.     android:parentActivityName=".MainActivity"  
  5.     android:theme="@style/Theme.Custom" >  
  6. </activity>  

2、Activity里面的代码如下:

[java] view plain copy print ?
  1. @Override  
  2. protected void onCreate(Bundle savedInstanceState) {  
  3.     super.onCreate(savedInstanceState);  
  4.     setContentView(R.layout.activity_theme_holo);  
  5.   
  6.     getActionBar().setDisplayHomeAsUpEnabled(true);  
  7.     getActionBar().setHomeButtonEnabled(true);  
  8. }  
  9.   
  10. @Override  
  11. public boolean onOptionsItemSelected(MenuItem item) {  
  12.     switch (item.getItemId()) {  
  13.     // Respond to the action bar's Up/Home button   
  14.     case android.R.id.home:  
  15.         NavUtils.navigateUpFromSameTask(this);  
  16.         return true;  
  17.     }  
  18.     return super.onOptionsItemSelected(item);  
  19. }  

3、运行以上代码会发现点击返回按钮的时候,画面切换的动画效果显示又创建了一个Activity,而不是回到上一个Activity。要想回到上一个Activity,只要设置activity的android:launchMode="singleTop"就OK了。

ActionBar的主题风格

可以给ActionBar设置主题风格,可以使用Android自带的Theme,也可以使用自定义的Theme。

ActionBar的主题风格(Android自带的Theme.Holo)

方法:在AndroidManifest.xml里面的activity标签里面添加android:theme="@android:style/Theme.Holo"。

[html] view plain copy print ?
  1. <activity  
  2.             android:name=".ThemeHoloActivity"  
  3.             android:label="@string/theme_holo_activity_name"  
  4.             android:theme="@android:style/Theme.Holo" >  
  5. </activity>  
android:label="@string/theme_holo_activity_name"可以设置ActionBar的title。

运行结果如下:

Android_ActionBar_第3张图片

ActionBar、Popupmenu以及整个画面都是黑色的。

ActionBar的主题风格(Android自带的Theme.Holo.Light)

方法:将上面的主题变成Theme.Holo.Light即可。

运行结果如下:

Android_ActionBar_第4张图片

ActionBar、Popupmenu以及整个画面都是白色的。

ActionBar的主题风格(Androd自带的Theme.Holo.Light.DarkActionBar)

方法:将上面的主题变成Theme.Holo.Light.DarkActionBar即可。

运行结果如下:

Android_ActionBar_第5张图片

ActionBar、Popupmenu是黑色的,画面其他部分是白色的。

ActionBar的主题风格(自定义)

首先设置activity的主题为Theme.Custom

[html] view plain copy print ?
  1. <activity  
  2.             android:name=".ThemeCustomActivity"  
  3.             android:label="@string/theme_custom_activity_name"  
  4.             android:theme="@style/Theme.Custom" >  
  5. </activity>  

再设置Theme.Custom的内容
[html] view plain copy print ?
  1. <style name="Theme.Custom" parent="@android:style/Theme.Holo.Light">  
  2.     <item name="android:actionBarStyle">@style/CustomActionBarStyle</item>  
  3.     <item name="android:actionButtonStyle">@style/CustomActionButtonStyle</item>  
  4.     <item name="android:actionOverflowButtonStyle">@style/CustomActionOverflowButtonStyle</item>  
  5.     <!-- Change home button background -->  
  6.     <item name="android:selectableItemBackground">@drawable/action_button_background</item>  
  7. </style>  
  8.   
  9. <style name="CustomActionBarStyle" parent="@android:style/Widget.ActionBar">  
  10.   
  11.     <!-- Change action bar background color -->  
  12.     <item name="android:background">@color/skyblue</item>  
  13.     <!-- Change split action bar background color -->  
  14.     <item name="android:backgroundSplit">@color/skyblue</item>  
  15.     <item name="android:titleTextStyle">@style/CustomTitleTextStyle</item>  
  16. </style>  
  17.   
  18. <style name="CustomTitleTextStyle" parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title">  
  19.   
  20.     <!-- Change action bar title color -->  
  21.     <item name="android:textColor">@color/red</item>  
  22. </style>  
  23.   
  24. <style name="CustomActionButtonStyle" parent="@android:style/Widget.ActionButton">  
  25.   
  26.     <!-- Change action button background color -->  
  27.     <item name="android:background">@drawable/action_button_background</item>  
  28. </style>  
  29.   
  30. <style name="CustomActionOverflowButtonStyle" parent="@android:style/Widget.Holo.Light.ActionButton.Overflow">  
  31.   
  32.     <!-- Change overflow button background color -->  
  33.     <item name="android:background">@drawable/action_button_background</item>  
  34. </style>  

最后在Activity里面添加如下代码:
[java] view plain copy print ?
  1. // change action icon   
  2. getActionBar().setIcon(R.drawable.ic_launcher);  
  3. // set home as up button enable   
  4. getActionBar().setDisplayHomeAsUpEnabled(true);  
  5. getActionBar().setHomeButtonEnabled(true);  

具体代码 :http://download.csdn.net/detail/tianjf0514/6462671


你可能感兴趣的:(android,Android开发,Actionbar,界面设计,Android3.0)