我在AppBarLayout
中有一个Toolbar
。
以下是两个视图的XML:
<android.support.design.widget.AppBarLayout
android:id="@+id/appbarlayout"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:theme="@style/App.ThemeOverlay.Toolbar">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_height="?attr/actionBarSize"
android:layout_width="match_parent"/>
</android.support.design.widget.AppBarLayout>
主题为:
<style name="App.ThemeOverlay.Toolbar" parent="ThemeOverlay.AppCompat.Dark.ActionBar"/>
并将主题应用于Activity
:
<style name="App.Theme" 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:windowBackground">@android:color/white</item>
</style>
现在,我希望为工具栏应用自定义的
titleTextAppearance
样式。我知道我可以在布局的XML中使用
app:titleTextAppearance
,但我想从主题中配置它,这样我的应用程序中的每个工具栏都将具有相同的样式,而无需在每个布局中设置文本外观。经过对AppCompat源代码的一番探索,我发现
Toolbar
将当前主题的 toolbarStyle
作为其默认主题。此样式的默认值为
Widget.AppCompat.ActionBar
。所以我第一个猜测是在我的主题覆盖中覆盖此样式,并在这个新样式中更改
titleTextAppearance
:<style name="App.ThemeOverlay.Toolbar" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
<item name="toolbarStyle">@style/App.Style.Toolbar</item>
</style>
<style name="App.Style.Toolbar" parent="Widget.AppCompat.ActionBar">
<item name="titleTextAppearance">@style/App.TextAppearance.Toolbar.Title</item>
</style>
<style name="App.TextAppearance.Toolbar.Title" parent="TextAppearance.Widget.AppCompat.Toolbar.Title">
<item name="android:textColor">#00FF00</item> (this is some green)
<item name="android:textAllCaps">true</item>
</style>
这实际上覆盖了我的工具栏的titleTextAppearance
,但也破坏了导航图标:
我的配置有什么问题会破坏导航图标?
记录一下,我尝试删除主题覆盖的toolbarStyle
,并直接在工具栏的布局XML中使用style="@style/App.Style.Toolbar"
。
这样正确地应用了标题文本外观,并且不会破坏导航图标,但这并不是最理想的,因为我必须将样式应用于应用程序中的每个工具栏,而这正是我一开始想要避免的。
感谢帮助, 皮埃尔