【发布时间】:2016-12-09 16:30:04
【问题描述】:
关于 Android 主题和样式的问题和文章有上百万个 - 我已经阅读了其中的一半和I'm still going crazy。
我想要的只是为我的应用程序创建一个主题,并在该主题中指定我的工具栏的颜色(我正在为每个活动指定它们,我认为在阅读 the official documentation 之后这样做是正确的。
所以,在我的styles.xml 文件中,我有:
<style name="MyTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:toolbarStyle">@style/MyToolbar</item>
</style>
<style name="MyToolbar" parent="Base.Widget.AppCompat.Toolbar">
<item name="android:textColor">#ffffff</item>
<item name="android:textColorPrimary">#ffffff</item>
<item name="android:elevation">4dp</item>
<item name="android:background">@color/colorPrimary</item>
</style>
在我看来,我在这里为我的工具栏创建了一种样式,然后在我的主题中引用了该样式。然后我将我的主题设置为AndroidManifest.xml中的应用程序主题:
android:theme="@style/MyTheme"
在大多数情况下,这是可行的。我的主题中引用了其他样式,为了简单起见,我在代码中省略了这些样式,它们可以正常工作 - 我的按钮、文本视图等按照我创建的样式设置样式。
但讨厌的工具栏不是。我已经尝试直接在工具栏 xml 中引用我的样式(即使我不明白为什么我需要在主题中指定它):
<android.support.v7.widget.Toolbar
android:id="@+id/main_activity_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
style="@style/MyToolbar">
</android.support.v7.widget.Toolbar>
令人沮丧的是,这确实会导致工具栏的背景颜色与我想要的一样,但文本仍然是黑色,即使我试图将其设为白色。
我是否误解了主题引用样式然后应用于活动或整个应用程序的方式?工具栏有什么独特之处吗?与从头开始编写整个应用程序的其余部分相比,我花了更长的时间来尝试解决这个问题,这是我的第一个 Android 应用程序!
更新: 好的,所以我已经计算出,虽然我的工具栏的背景颜色需要设置为应用于工具栏的 style,以防止将背景颜色传播到所有子视图,但所需的文本颜色需要在 theme 中指定,因为工具栏中显示的文本是子视图(即使我在活动的 xml 中看不到它)。所以,这行得通:
styles.xml:
<style name="MyTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:buttonStyle">@style/MyButton</item>
<item name="android:editTextStyle">@style/MyEditText</item>
</style>
<style name="MyToolbarStyle" parent="Base.Widget.AppCompat.Toolbar">
<item name="android:elevation">4dp</item>
<item name="android:background">@color/colorPrimary</item>
</style>
<style name="MyToolbarTheme" parent="Base.Widget.AppCompat.Toolbar">
<item name="android:textColorPrimary">#ffffff</item>
</style>
main_activity.xml:
<android.support.v7.widget.Toolbar
android:id="@+id/main_activity_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
style="@style/MyToolbarStyle"
app:theme="@style/MyToolbarTheme">
</android.support.v7.widget.Toolbar>
所以我想我已经实现了我想要的,但我还没有回答我最初的问题:为什么工具栏样式没有从我的主题中隐式应用?为什么我必须在工具栏的标记中明确声明它?
【问题讨论】:
标签: android android-theme android-styles