2016-07-04 37 views
3

我在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但它也打破了导航图标:

Toolbar Style Fail

有什么不对我的配置,打破了导航图标?

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

这正确地应用标题文本的外观,它不会中断导航图标,但这不是最佳的,因为我必须将样式应用到我的应用程序的每个工具栏,这就是我试图避免的开始。

感谢您的帮助, 皮埃尔

回答

4

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