修改ACTIONBAR样式

步骤:

1. 自定义style

<style name="<span style="color: #ff0000;">Theme.CustomActionBar</span>" parent="@style/Theme.AppCompat">
    <item name="android:actionBarStyle">@style/ActionBar</item>
    <item name="android:actionBarDivider">@null</item>
    <item name="android:actionOverflowButtonStyle">@style/Theme.CustomActionBar.OverFlow</item>
    
    <!-- Support library compatibility -->
    <item name="actionBarStyle">@style/MainActionBar</item>
    <item name="actionBarDivider">@null</item>
    <item name="actionOverflowButtonStyle">@style/Theme.CustomActionBar.OverFlow</item>
</style>

<!-- ActionBar styles -->
<style name="ActionBar" parent="@style/Widget.AppCompat.ActionBar">
    <item name="android:background">@android:color/white</item>
    <item name="android:titleTextStyle">@style/ActionBarTitleText</item>

    <!-- Support library compatibility -->
    <item name="background">@android:color/white</item>
    <item name="titleTextStyle">@style/MainActionBarTitleText</item>
</style>

<!-- ActionBar title text -->
<style name="ActionBarTitleText" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
    <item name="android:textColor">@android:color/black</item>
</style>

2. 设置activity的theme为自定义style

<activity
    ......
    android:theme="@style/<span style="color: #ff0000;">Theme.CustomActionBar</span>" >
  • 自定义style中,可以设置的项目包括:

  (1)Overflow button样式:actionOverflowButtonStyle
  (2)actionbar背景色:ActionBar – background
  (3)actionbar title的文字颜色:ActionBarTitleText – textColor

  • 某些actionbar不显示overflow button,是由于手机本身有物理home键。若这种情况下也需要显示overflow button,可以这样做:
    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();
        }
    }
    
    @Override
    void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(......);
        setOverflowShowingAlways();
        ......
    }
  •  如果需要使得actionbar的title居中,则需要使用自定义actionbar:
    @Override
    void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(......);
        getSupportActionBar().setDisplayOptions(
            ActionBar.DISPLAY_SHOW_CUSTOM);
        getSupportActionBar().setCustomView(
            R.layout.<span style="color: #339966;">actionbar</span>);
        ......
    }

    其中,actionbar是自定义layout,对应actionbar中的布局

  • 某些theme的actionbar下边框带有阴影,使得actionbar有了分割线。如果需要去掉分割线,需要修改theme。例如,名称带有Light的theme会有阴影,改为不带Light则没有阴影。

  

参考:

http://stackoverflow.com/questions/10961107/android-remove-more-actions-button-from-the-actionbar

http://stackoverflow.com/questions/11425660/change-color-of-the-overflow-button-on-actionbar

http://stackoverflow.com/questions/18950839/i-want-to-remove-the-divider-under-the-action-bar

http://blog.csdn.net/xy_nyle/article/details/18970211

posted @ 2015-11-08 18:34  lych2e  阅读(1003)  评论(0)    收藏  举报