?attr/ 未在工具栏中设置正确的颜色
?attr/ not setting right color in Toolbar
我正在为我的项目使用来自 http://android-developers.blogspot.in/2014/10/appcompat-v21-material-design-for-pre.html 的相同代码。
当我创建一个空白项目以仅测试工具栏时,颜色正常工作。但是,在使用相同代码将我的项目升级到 material 设计后,工具栏颜色变为灰色。
似乎 android:background?attr/colorPrimary
没有加载正确的颜色。当我使用 @color\theme_red
时,工具栏上的颜色设置正确。
这里出了什么问题?
我的colors.xml:
<?xml version="1.0" encoding="utf-8"?><resources>
<color name="theme_red">#d43d1e</color>
<color name="theme_red_dark">#aa3118</color>
<color name="theme_accent">#3333ff</color>
</resources>
&styles.xml:
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="AppTheme.Base"/>
<style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/theme_red</item>
<item name="colorPrimaryDark">@color/theme_red_dark</item>
<item name="colorAccent">@color/theme_accent</item>
</style>
& 工具栏代码:
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:minHeight="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
android:background?attr/colorPrimary
时工具栏的外观:
@color/theme_red
:
时工具栏的外观
更新:
我正在更新问题,因为现在我在代码中有另一个似乎相关的错误。我在 Android 5.0.2 phone 上试用了该应用程序,即使在 styles.xml 中定义了正确的主题和颜色,状态栏也没有染上较深的阴影。状态栏的颜色与第一张图片中的 Toolbar
完全相同。
styles.xml在上面。 v-21/styles.xml 如下:
<resources>
<style name="AppTheme" parent="AppTheme.Base">
<item name="colorPrimary">@color/theme_red</item>
<item name="colorPrimaryDark">@color/theme_red_dark</item>
<item name="colorAccent">@color/theme_accent</item>
<item name="android:windowContentTransitions">true</item>
<item name="android:windowAllowEnterTransitionOverlap">true</item>
<item name="android:windowAllowReturnTransitionOverlap">true</item>
<item name="android:windowSharedElementEnterTransition">@android:transition/move</item>
<item name="android:windowSharedElementExitTransition">@android:transition/move</item>
</style>
</resources>
不知何故,即使正确定义了颜色,系统也无法使用这些颜色。
完整的项目可在以下位置获得:https://github.com/pauldmps/BPUTApp-AndroidStudio 如果有人想查看整个代码。
这很奇怪...也许尝试将其用作您的 styles.xml
:
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/theme_red</item>
<item name="colorPrimaryDark">@color/theme_red_dark</item>
<item name="colorAccent">@color/theme_accent</item>
</style>
</resources>
如果您想使用 DarKActionBar
作为您的 AppTheme
,您必须通过添加 AppTheme
:
来禁用默认操作栏
<item name="windowActionBar">false</item>
<item name="android:windowNoTitle">true</item>
使用小部件需要它们 ToolBar
。但是你已经为你的AppTheme
使用了NoActionBar
,那么就不需要以上两项了,但是你应该在你的ToolBar
中设置app:theme
为AppTheme
。
您很可能遇到此行为,因为您在 XML 文件中将 Toolbar
的主题设置为 ThemeOverlay.AppCompat.Dark.ActionBar。
尝试更改
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
到
app:theme="@style/AppTheme"
您可能还想专门为 Toolbar
指定一个主题。
<!-- Exclusive theme for the Toolbar -->
<style name="Theme.Toolbar" parent="Theme.AppCompat">
<item name="colorPrimary">@color/yourColor</item>
<item name="android:textColorPrimary">@color/yourTextColor</item>
</style>
所以我不知道这是什么魔法...但这是对我有用的修复方法
在您的 values-v21/styles.xml 中,添加这些行。
<item name="colorPrimary">@color/theme_red</item>
<item name="colorPrimaryDark">@color/theme_red_dark</item>
<item name="colorAccent">@color/theme_accent</item>
我不知道为什么样式 21 不继承这些属性...但是哦好吧
您在清单中指定了错误的主题:
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.AppCompat.Light.NoActionBar">
你应该使用 android:theme="@style/AppTheme"
.
我正在为我的项目使用来自 http://android-developers.blogspot.in/2014/10/appcompat-v21-material-design-for-pre.html 的相同代码。
当我创建一个空白项目以仅测试工具栏时,颜色正常工作。但是,在使用相同代码将我的项目升级到 material 设计后,工具栏颜色变为灰色。
似乎 android:background?attr/colorPrimary
没有加载正确的颜色。当我使用 @color\theme_red
时,工具栏上的颜色设置正确。
这里出了什么问题?
我的colors.xml:
<?xml version="1.0" encoding="utf-8"?><resources>
<color name="theme_red">#d43d1e</color>
<color name="theme_red_dark">#aa3118</color>
<color name="theme_accent">#3333ff</color>
</resources>
&styles.xml:
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="AppTheme.Base"/>
<style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/theme_red</item>
<item name="colorPrimaryDark">@color/theme_red_dark</item>
<item name="colorAccent">@color/theme_accent</item>
</style>
& 工具栏代码:
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:minHeight="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
android:background?attr/colorPrimary
时工具栏的外观:
@color/theme_red
:
更新:
我正在更新问题,因为现在我在代码中有另一个似乎相关的错误。我在 Android 5.0.2 phone 上试用了该应用程序,即使在 styles.xml 中定义了正确的主题和颜色,状态栏也没有染上较深的阴影。状态栏的颜色与第一张图片中的 Toolbar
完全相同。
styles.xml在上面。 v-21/styles.xml 如下:
<resources>
<style name="AppTheme" parent="AppTheme.Base">
<item name="colorPrimary">@color/theme_red</item>
<item name="colorPrimaryDark">@color/theme_red_dark</item>
<item name="colorAccent">@color/theme_accent</item>
<item name="android:windowContentTransitions">true</item>
<item name="android:windowAllowEnterTransitionOverlap">true</item>
<item name="android:windowAllowReturnTransitionOverlap">true</item>
<item name="android:windowSharedElementEnterTransition">@android:transition/move</item>
<item name="android:windowSharedElementExitTransition">@android:transition/move</item>
</style>
</resources>
不知何故,即使正确定义了颜色,系统也无法使用这些颜色。
完整的项目可在以下位置获得:https://github.com/pauldmps/BPUTApp-AndroidStudio 如果有人想查看整个代码。
这很奇怪...也许尝试将其用作您的 styles.xml
:
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/theme_red</item>
<item name="colorPrimaryDark">@color/theme_red_dark</item>
<item name="colorAccent">@color/theme_accent</item>
</style>
</resources>
如果您想使用 DarKActionBar
作为您的 AppTheme
,您必须通过添加 AppTheme
:
<item name="windowActionBar">false</item>
<item name="android:windowNoTitle">true</item>
使用小部件需要它们 ToolBar
。但是你已经为你的AppTheme
使用了NoActionBar
,那么就不需要以上两项了,但是你应该在你的ToolBar
中设置app:theme
为AppTheme
。
您很可能遇到此行为,因为您在 XML 文件中将 Toolbar
的主题设置为 ThemeOverlay.AppCompat.Dark.ActionBar。
尝试更改
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
到
app:theme="@style/AppTheme"
您可能还想专门为 Toolbar
指定一个主题。
<!-- Exclusive theme for the Toolbar -->
<style name="Theme.Toolbar" parent="Theme.AppCompat">
<item name="colorPrimary">@color/yourColor</item>
<item name="android:textColorPrimary">@color/yourTextColor</item>
</style>
所以我不知道这是什么魔法...但这是对我有用的修复方法
在您的 values-v21/styles.xml 中,添加这些行。
<item name="colorPrimary">@color/theme_red</item>
<item name="colorPrimaryDark">@color/theme_red_dark</item>
<item name="colorAccent">@color/theme_accent</item>
我不知道为什么样式 21 不继承这些属性...但是哦好吧
您在清单中指定了错误的主题:
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.AppCompat.Light.NoActionBar">
你应该使用 android:theme="@style/AppTheme"
.