【问题标题】:Android SDK: Can't style ActionBar of support libraryAndroid SDK:无法设置支持库的 ActionBar 样式
【发布时间】:2017-01-09 04:50:22
【问题描述】:

由于某种原因,我在实现 support-v7 时无法使用 style.xml 设置操作栏样式。

我有两个样式文件。这是来自 values 文件夹的 style.xml:

<resources>

    <color name="primary">#009688</color>
    <color name="primaryDark">#00796B</color>

    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="android:actionBarStyle">@style/myActionBar</item>
    </style>

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

</resources>

还有来自 values-v21 的棒棒糖样式:

<resources>

    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="android:colorPrimary">@color/primary</item>
        <item name="android:colorPrimaryDark">@color/primaryDark</item>
    </style>
</resources>

这里会发生什么:

1) 我的应用默认实现了 support-v7 库中的 android.support.v7.app.ActionBarActivity。当我启动它时:

a) 在 Android 4.4 上,操作栏没有颜色,和以前一样是黑色的。

b) 在 Android 5 设备上,它也没有着色,但状态栏有颜色。

因此,操作栏样式不适用于 support-v7 的栏。即使将全局 textColor 参数设置为明亮的颜色,每个文本都会改变颜色,只有我的应用程序的标题保持白色。

但是,我仍然可以用代码为它着色:getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#673AB7")))

2) 如果我为我的应用实现 android.app.Activity(不是 android.support.v7.app.ActionBarActivity):

a) Lollipop 设备获得整洁的绿色操作栏和整洁的绿色状态栏。 b) 但是在 4.4 上操作栏完全消失了。

我尝试在主题标签上的 values/style.xml 中使用这些样式参数取回它,但它们都不起作用:

<item name="android:windowActionBar">true</item>
<item name="android:displayOptions">showTitle</item>

最小 SDK 设置为 15。

如何在两个平台上获得样式化的操作栏?

【问题讨论】:

    标签: java android mobile sdk


    【解决方案1】:

    只需将这些设置为您在 values/style.xml 中的自定义基本主题

     <item name="colorPrimary">@color/your_primary_color</item>
     <item name="colorPrimaryDark">@color/your_primary_dark_color</item>
     <item name="colorAccent">@color/your_accent_color</item>
     <item name="windowActionBar">false</item>
     <item name="android:windowActionBar">false</item>
     <item name="android:windowNoTitle">true</item>
    

    并使用android.support.v7.widget.Toolbar。 确保您使用的是支持库 v21 或更高版本。

    【讨论】:

    • 谢谢,工具栏解决了我的问题 :) 下面由 albemala 提供的指南也很有帮助。
    【解决方案2】:

    关注this guide

    1) 您的所有活动都必须从 ActionBarActivity 扩展而来,后者从 v4 支持库中的 FragmentActivity 扩展而来,因此您可以继续使用片段。

    2) 移除 values-v21/themes.xml,只留下 values/themes.xml

    3) 告诉 Android 将 Toolbar 用作 ActionBar:

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    

    4) 在你的 style.xml 中,替换

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

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

    【讨论】:

    • 在第 4 步中你做了什么改变?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-19
    • 1970-01-01
    • 1970-01-01
    • 2015-09-14
    • 1970-01-01
    • 2014-12-20
    • 1970-01-01
    相关资源
    最近更新 更多