工具栏默认样式和导航图标

pde*_*d59 5 android toolbar android-appcompat

我有一个Toolbar内心AppBarLayout.以下是两个视图的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>
Run Code Online (Sandbox Code Playgroud)

主题为:

<style name="App.ThemeOverlay.Toolbar" parent="ThemeOverlay.AppCompat.Dark.ActionBar"/>
Run Code Online (Sandbox Code Playgroud)

主题适用于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>
Run Code Online (Sandbox Code Playgroud)

现在,我想titleTextAppearance为工具栏应用自定义.

我知道我可以app:titleTextAppearance在我的布局的XML中使用,但我想从主题配置它,以便我的应用程序的每个工具栏都具有相同的样式,而无需在每个布局中设置文本外观.

经过一些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>
Run Code Online (Sandbox Code Playgroud)

这实际上覆盖了titleTextAppearance我的工具栏,但它也打破了导航图标:

工具栏样式失败

我的配置打破导航图标有什么问题?

为了记录,我试图删除toolbarStyle主题叠加层,并直接在工具栏的布局XML中使用style="@style/App.Style.Toolbar".

这正确地应用了标题文本外观并且没有打破导航图标,但这不是最佳的,因为我必须将样式应用于我的应用程序的每个工具栏,这就是我从一开始就要避免的.

谢谢你的帮助,皮埃尔

Chr*_*nes 5

您的默认样式应该扩展Widget.AppCompat.Toolbar,而不是Widget.AppCompat.ActionBar.之后它会工作得很好.