fra*_*llo 5 android android-appcompat android-theme material-design android-toolbar
我有一个“轻”主题的应用程序:
<style name="Theme.MyTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/primary</item>
<item name="colorPrimaryDark">@color/primary_dark</item>
<item name="colorAccent">@color/accent</item>
<!-- etc. -->
</style>
Run Code Online (Sandbox Code Playgroud)
我希望我的Toolbar主题是深色主题,所以我设置了以下样式,正如Chris Banes的建议:
<style name="Theme.MyTheme.Toolbar" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
<!-- stuff -->
</style>
Run Code Online (Sandbox Code Playgroud)
然后,通过添加android:theme="@style/Theme.ByodTheme.Toolbar"到 my android.support.v7.widget.Toolbar,一切都按预期工作(即使 Android Studio 预览不显示标题的白色,它也适用于设备):

现在,我不想在应用程序中指定每个工具栏,而是android:theme想在主主题中指定样式,然后忘记它。我已经尝试过该toolbarStyle属性,但看起来它没有按预期工作,因为它完全搞乱了标准属性:

我还进行了其他尝试,通过使工具栏主题继承Widget.AppCompat.Toolbar,并通过更改titleTextAppearance和subtitleTextAppearance,但看起来不可能更改溢出图标颜色(是的,我尝试设置actionOverflowButtonStyle并继承该样式Widget.AppCompat.ActionButton.Overflow,但没有成功更改溢出图标颜色)。
有没有办法从一个点指定应用程序中每个工具栏的主题?
您可以为此使用自定义属性 - 基本上只需将工具栏设置为使用您将在主题中定义的自定义值即可。
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:theme="?attr/toolbar_theme"
/>
Run Code Online (Sandbox Code Playgroud)
重要的部分是android:theme="?attr/toolbar_theme"引用当前主题中的自定义属性。
您需要在某处声明此属性,如下所示:
<resources>
<attr name="toolbar_theme" format="reference" />
</resources>
Run Code Online (Sandbox Code Playgroud)
toolbar_theme然后,您可以通过在主题中分配一个值来定义您希望工具栏使用的值。例如,要使用它,Theme.MyTheme.Toolbar您可以像这样定义它:
<style name="Theme.MyTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/primary</item>
<item name="colorPrimaryDark">@color/primary_dark</item>
<item name="colorAccent">@color/accent</item>
<!-- etc. -->
<item name="toolbar_theme">@style/Theme.MyTheme.Toolbar</item>
</style>
Run Code Online (Sandbox Code Playgroud)
使用属性的好处是它可以让您的应用程序具有多个主题,并且单个工具栏资源将使用您在主题中设置的任何值。
| 归档时间: |
|
| 查看次数: |
2079 次 |
| 最近记录: |