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

标签 android toolbar android-appcompat

我在 AppBarLayout 中有一个 Toolbar。 这是两个 View 的 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"/>

Theme 应用于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 并直接在工具栏的布局 XML 中使用 style="@style/App.Style.Toolbar".

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

感谢您的帮助, 皮埃尔

最佳答案

您的默认样式应该扩展Widget.AppCompat.Toolbar,而不是Widget.AppCompat.ActionBar。之后它将正常工作。

关于android - 工具栏默认样式和导航图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38181709/

相关文章:

android - 解析 XML 的最佳实践

Android模拟器不旋转到横向

python - Mayavi:自定义工具栏

ios - 应用程序在 View Controller 中添加 @IBAction 时崩溃

android - play-services-oss-licenses 的主题

java - TabLayout 上的 setupWithViewPager(android.support.v4.view.ViewPager) 无法应用于 (androidx.viewpager..widget.ViewPager)

java - 将 json 数据写入和读取到内部存储 android

android - 如何为每个项目按钮设置值增加和减少单击并在 TextView 中设置该值

delphi - 如何向 FireMonkey 工具栏添加按钮?

java - 从 v4 升级项目后找不到类 'android.support.v7.app.NotificationCompat$Builder'