首页 > 代码库 > ActionBar的定制

ActionBar的定制

     在我们开发app时,可以隐藏顶部的ActionBar,然后自己定义一套顶部的布局来代替ActionBar。 
     但是有时我们又需要用到ActionBar,那么我们该如何定制ActionBar呢?
     如果需要改变ActionBar中出现的ActionButton,那么可以在res->menu->main.xml中添加或者修改那些Button的文字或者图标。
  1. <menu xmlns:android="http://schemas.android.com/apk/res/android" >
  2. <item
  3. android:id="@+id/action_search"
  4. android:actionViewClass="android.widget.SearchView"
  5. android:icon="@drawable/actionbar_search_icon"
  6. android:showAsAction="ifRoom|collapseActionView"
  7. android:title="@string/action_search"/>
  8. <item
  9. android:id="@+id/action_group_chat"
  10. android:icon="@drawable/menu_group_chat_icon"
  11. android:title="@string/menu_group_chat"/>
  12. <item
  13. android:id="@+id/action_add_friend"
  14. android:icon="@drawable/menu_add_icon"
  15. android:title="@string/menu_addfriend"/>
  16. <item
  17. android:id="@+id/action_scan"
  18. android:icon="@drawable/men_scan_icon"
  19. android:title="@string/menu_scan"/>
  20. <item
  21. android:id="@+id/action_feedback"
  22. android:icon="@drawable/menu_feedback_icon"
  23. android:title="@string/menu_feedback"/>
  24. </menu>
       第一个Item是一个Widget,具体的详情可以百度,这里不多做解释。
       如果需要隐藏左侧app图标,则可以在布局文件加载后调用以下代码。
  1. getActionBar().setDisplayShowHomeEnabled(false);
        如果需要永久显示OverflowButton并且改变点击menu时菜单出现的位置,则可以在布局文件加载后调用以下方法。
  1. private void setOverflowButtonAlways(){
  2. try{
  3. ViewConfiguration config = ViewConfiguration.get(this);
  4. Field menuKey = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
  5. menuKey.setAccessible(true);
  6. menuKey.setBoolean(config, false);
  7. } catch (Exception e){
  8. e.printStackTrace();
  9. }
  10. }
        如果需要让隐藏的ActionButtion也显示图标,则可以复写onMenuOpened方法。
  1. @Override
  2. public boolean onMenuOpened(int featureId, Menu menu){
  3. if (featureId == Window.FEATURE_ACTION_BAR && menu != null){
  4. if (menu.getClass().getSimpleName().equals("MenuBuilder")){
  5. try{
  6. Method m = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE);
  7. m.setAccessible(true);
  8. m.invoke(menu, true);
  9. } catch (Exception e){
  10. e.printStackTrace();
  11. }
  12. }
  13. }
  14. return super.onMenuOpened(featureId, menu);
  15. }
        如果需要修改OverflowButton的图标,则可以修改style文件。
  1. <resources xmlns:android="http://schemas.android.com/apk/res/android">
  2. <style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar">
  3. <item name="android:actionOverflowButtonStyle">@style/weixinActionOverflowButtonStyle</item>
  4. </style>
  5. <style name="weixinActionOverflowButtonStyle">
  6. <item name="android:src">@drawable/actionbar_add_icon</item>
  7. </style>
  8. </resources>
        注意:如果需要兼容API14以下的版本,则不能直接在默认调用的value目录下的style.xml文件。


来自为知笔记(Wiz)


ActionBar的定制