有关于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>
所以我想我已经实现了我想要的,但我还没有回答我原来的问题:为什么工具栏样式不是从我的主题中隐含应用的?为什么我必须在工具栏的标记中明确声明它?
答案 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>
效果很好。