应用主题的样式工具栏

时间:2016-12-09 16:30:05

标签: android android-theme android-styles

有关于Android主题和样式的一百万个问题和文章 - 我已经阅读了其中一半和I'm still going crazy

我想要的一切 - 来自Web应用程序开发的背景,我认为这很容易 - 我认为这很容易 - 是为我的应用程序创建一个主题,并在该主题中指定我的工具栏的颜色(我在每个活动中指定它们,我认为在阅读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"

在大多数情况下,这都有效。我的主题中引用了其他样式,为了简单起见,我在代码中省略了这些样式,并且它们正常工作 - 我的按钮,textview等按照我创建的样式进行样式设置。

但讨厌的工具栏不是。我已经尝试直接在工具栏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应用程序!

更新 好的,我已经知道我的工具栏背景颜色需要在应用于工具栏的样式中设置,以防止背景颜色传播到所有子视图,需要在主题中指定所需的文本颜色,因为工具栏中显示的文本是子视图(即使我无法在我的活动中看到它的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>

所以我想我已经实现了我想要的,但我还没有回答我原来的问题:为什么工具栏样式不是从我的主题中隐含应用的?为什么我必须在工具栏的标记中明确声明它?

2 个答案:

答案 0 :(得分:1)

做这样的事情:

<android.support.v7.widget.Toolbar
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/main_activity_toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    app:theme="@style/MyToolbar"
    app:popupTheme="@style/TextStyle"/> 

此外,请在此处阅读此information以了解风格和主题。请在此处参阅this链接。

答案 1 :(得分:0)

对我来说:

<item name="toolbarStyle">@style/MyToolbar</item>

而不是:

<item name="android:toolbarStyle">@style/MyToolbar</item>

效果很好。