关于Android主题和样式的问题和文章有很多 - 我已经阅读了其中一半,但我还是感到很困惑。
我想要的 - 出自我的Web应用程序开发背景,那些可爱友好的CSS样式表让我认为这会很容易 - 就是为我的应用程序创建一个主题,并在该主题中指定我的工具栏颜色(我按照官方文档的说明对每个Activity进行指定)。
因此,在我的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应用程序!
更新:好的,我已经弄清楚了,虽然我的工具栏的背景颜色需要在应用于工具栏的样式中设置,以防止该背景颜色传播到所有子视图,但所需的文本颜色需要在主题中指定,因为在工具栏中显示的文本是一个子视图(即使我在活动的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>
所以我想我已经实现了我的目标,但我没有回答我的最初问题:为什么我的主题不能隐式地应用工具栏样式?为什么我必须在工具栏的标记中显式声明它?