Android 应用程序主题的样式工具栏

Android 应用程序主题的样式工具栏,android,android-theme,android-styles,Android,Android Theme,Android Styles,关于安卓主题和风格的问题和文章有一百万篇,我已经读了一半,还有更多 我想要做的就是为我的应用程序创建一个主题,并在这个主题中指定我的工具栏的颜色(我在每个活动中指定它们,我认为这是阅读后应该做的事情) 因此,在我的style.xml文件中,我得到了: <style name="MyTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="colorPrimary">@color/colorPrim

关于安卓主题和风格的问题和文章有一百万篇,我已经读了一半,还有更多

我想要做的就是为我的应用程序创建一个主题,并在这个主题中指定我的工具栏的颜色(我在每个活动中指定它们,我认为这是阅读后应该做的事情)

因此,在我的
style.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>
在大多数情况下,这是可行的。我的主题中还引用了其他样式,为了简单起见,我在代码中省略了这些样式,它们工作正常-我的按钮、文本视图等都是根据我创建的样式进行样式设置的

但讨厌的工具栏不是。我已经尝试直接在工具栏xml中引用我的样式(即使我不明白为什么我需要在主题中指定样式):


令人沮丧的是,这确实导致工具栏的背景颜色与我想要的一样,但文本仍然是黑色的,尽管我试图将其变为白色

我是否误解了主题引用样式,然后应用于活动或整个应用程序的方式?工具栏有什么独特之处吗?我花了更长的时间来尝试和解决这个问题,而不是从头开始编写整个应用程序的其余部分,这是我的第一个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>

@颜色/原色
@颜色/原色暗
@颜色/颜色重音
@样式/我的按钮
@样式/文本
4dp
@颜色/原色
#ffffff
主活动.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.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"/> 
来了解一下风格和主题。请参阅此处的链接。

了解我:

<item name="toolbarStyle">@style/MyToolbar</item>
@style/MyToolbar
而不是:

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

非常好。

好的,这确实使我的工具栏文本变为白色,但它也将工具栏内的所有内容设置为工具栏样式,因此工具栏中的文本本身具有凸起的外观,就像工具栏一样。不确定如何在评论中包含屏幕截图。然而,这正是我所期望的,因为我想象将主题而不是样式应用于工具栏样式不仅应用于该视图,而且应用于子视图?这不是我想要的。我没有定义“TextStyle”,所以这不起作用。我可以创建一个,但我要做的就是覆盖从工具栏继承的主题,而我一开始并不想要这个主题。我只想设计工具栏本身,而不是它的子工具栏。除非工具栏中的文本实际上是工具栏的子级?我甚至不确定你链接的那篇文章的作者是否完全清楚主题和风格之间的区别。它们不仅预期的范围不同,而且具有不同的属性。当您将样式应用于工具栏时,其所有子项都将受到影响。这就是为什么会有流行歌曲。阅读Android文档中的默认工具栏主题,并将其用作主题。请参阅我在答案中添加的链接。
<item name="toolbarStyle">@style/MyToolbar</item>
<item name="android:toolbarStyle">@style/MyToolbar</item>