我在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
,并直接在工具栏style="@style/App.Style.Toolbar"
的布局的XML中使用。
这正确地应用标题文本的外观,它不会中断导航图标,但这不是最佳的,因为我必须将样式应用到我的应用程序的每个工具栏,这就是我试图避免的开始。
感谢您的帮助, 皮埃尔