AppCompat操作栏样式化

12

我目前正在尝试使用AppCompat代替ActionbarSherlock。在Android 4+设备上,我没有遇到任何问题,因为会使用普通的Actionbar和Holo主题。

ICS Actionbar

但是在较低版本的Android上,使用Theme.AppCompat.Light时会出现奇怪的外观。

Standard AppCompat Actionbar

Actionbar 是白色的,并且下面有一条蓝线。

我能够通过使用 Android Asset Studio 的 Android Action Bar Style Generator 生成一个自定义主题来解决这个问题,使得 Actionbar 不再透明而是实心的。

AppCompat with custom drawables from Style Generator

与使用 ActionbarSherlock 时得到的 Actionbar 相比,还是有点难看。

ActionbarSherlock

AppCompat Actionbar 有一条非常锐利的黑线将其和活动内容分开,而 ICS 的原始 Actionbar 或 ActionbarSherlock 的过渡则更加柔和。

如何样式化 Actionbar 让它的外观与Android 4+上的一样呢?

4个回答

18

你需要为想放置在背景上的图像创建自己的样式。在你的style.xml文件中,你应该创建类似于以下内容的东西:

values/styles.xml

    <style name="Theme.MyAppTheme" parent="@style/Theme.AppCompat.Light">
        <item name="actionBarStyle">@style/ActionBarTabStyle.MyAppTheme</item>
    </style>

    <style name="ActionBar.Solid.MyAppTheme" parent="@style/Widget.AppCompat.Light.ActionBar.Solid">
        <item name="background">@drawable/your_background_image</item>
    </style>

values-v14/styles.xml

    <style name="Theme.MyAppTheme" parent="@style/Theme.AppCompat.Light">
        <item name="android:actionBarStyle">@style/ActionBarTabStyle.MyAppTheme</item>
    </style>

    <style name="ActionBar.Solid.MyAppTheme" parent="@style/Widget.AppCompat.Light.ActionBar.Solid">
        <item name="android:background">@drawable/your_background_image</item>
    </style>

你可以使用这张9-patch图片:

9-patch image


1
谢谢,现在我知道该去哪里了。 - Bertram Sherwood
1
此外,用自定义的可绘制对象覆盖背景是不必要的。仅覆盖来自Widget.AppCompat.Light.ActionBar.Solid的actionBarStyle就足够了。 - Sash0k
此外,您可以使用displayOptions标签来集中ActionBar显示选项<item name="displayOptions">showTitle|homeAsUp</item>。 - Simon K. Gerges

3

我使用这段代码:

<resources>

<style name="AppTheme" parent="Theme.AppCompat.Light">
    <item name="actionBarStyle">@style/ActionBarTheme</item>
</style>

<style name="ActionBarTheme" parent="@style/Widget.AppCompat.Light.ActionBar.Solid">
    <item name="background">@color/red_action_bar</item>
</style>

</resources>

我希望这段代码能够对您有所帮助。

1

你必须覆盖操作栏的主题


0

为了在AppCompatActivity中显示自定义图标和颜色,我们可以粘贴以下代码:

values/styles.xml

<resources>

 <style name="Theme.MyAppTheme" parent="@style/Theme.AppCompat">
    <item name="actionBarStyle">@style/ActionBar.Solid.MyAppTheme</item>
    <item name="icon">@drawable/ic_launcher</item>
</style>

<style name="ActionBar.Solid.MyAppTheme" parent="@style/Widget.AppCompat.Light.ActionBar.Solid">
    <item name="background">@color/white</item>
</style>

values-v14/styles.xml

<resources>

<style name="Theme.MyAppTheme" parent="@style/Theme.AppCompat.Light">
    <item name="android:actionBarStyle">@style/ActionBar.Solid.MyAppTheme</item>
       <item name="icon">@drawable/ic_launcher</item>
</style>

<style name="ActionBar.Solid.MyAppTheme" parent="@style/Widget.AppCompat.Light.ActionBar.Solid">
    <item name="android:background">@color/app_titile_bar_color</item>
</style>

您可以使用自定义背景图片,例如 @drawable/your_pic.png

要显示应用程序图标和文本,您还需要将此粘贴到您的活动中。

        // set action Bar icon & Text
    ActionBar mActionBar = getSupportActionBar();
    mActionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_TITLE
            | ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_SHOW_HOME);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接