Android SDK:无法设置支持库的 ActionBar 样式
Android SDK: Can't style ActionBar of support library
出于某种原因,我无法在实现 support-v7 时使用 style.xml 设置操作栏样式。
我有两个样式文件。这是值文件夹中的 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) 我的应用程序默认实现 android.support.v7.app.ActionBarActivity 来自 support-v7 库。当我启动它时:
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 中的这些样式参数将其取回,但其中 none 有效:
<item name="android:windowActionBar">true</item>
<item name="android:displayOptions">showTitle</item>
最小 SDK 设置为 15。
如何在两个平台上获得样式化的操作栏?
正在关注 this guide:
1) 你所有的Activity都必须从ActionBarActivity扩展而来,而ActionBarActivity是从v4支持库中的FragmentActivity扩展而来的,所以你可以继续使用fragments。
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>
只需将这些设置为您在 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 或更高版本。
出于某种原因,我无法在实现 support-v7 时使用 style.xml 设置操作栏样式。
我有两个样式文件。这是值文件夹中的 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) 我的应用程序默认实现 android.support.v7.app.ActionBarActivity 来自 support-v7 库。当我启动它时:
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 中的这些样式参数将其取回,但其中 none 有效:
<item name="android:windowActionBar">true</item>
<item name="android:displayOptions">showTitle</item>
最小 SDK 设置为 15。
如何在两个平台上获得样式化的操作栏?
正在关注 this guide:
1) 你所有的Activity都必须从ActionBarActivity扩展而来,而ActionBarActivity是从v4支持库中的FragmentActivity扩展而来的,所以你可以继续使用fragments。
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>
只需将这些设置为您在 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 或更高版本。