如何在全球范围内重新定义所有活动的工具栏样式?

时间:2016-02-17 09:27:35

标签: android styling appcompat-v7-r21

我几乎在所有活动中都有AppCompat21 Appbar / Toolbar。所有活动布局文件都有以下共同点:

<!-- material design actionbar & toolbar -->
<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/AppTheme.AppBarOverlay">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:minHeight="?attr/actionBarSize"
        android:theme="@style/AppTheme.AppBarOverlay"
        app:popupTheme="@style/AppTheme.PopupOverlay"
        />

</android.support.design.widget.AppBarLayout>

所以不必一直添加这些属性:

 android:theme="@style/AppTheme.AppBarOverlay"
 android:theme="@style/AppTheme.AppBarOverlay"
 app:popupTheme="@style/AppTheme.PopupOverlay"

我试图了解如何在我的应用中以全局方式重新定义appbar /工具栏的外观和感觉,因此我不需要在任何地方使用这段冗余代码。

这甚至可能吗?我已经按照按钮样式完成了它,但我无法理解这个...

2 个答案:

答案 0 :(得分:2)

您可以创建包含工具栏的布局资源文件,名为Doughnut

toolbar

在您的活动中,您只需执行

即可
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
   xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:app="http://schemas.android.com/apk/res-auto"
   app:popupTheme="@style/AppTheme.PopupOverlay"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:theme="@style/AppTheme.AppBarOverlay"
   app:popupTheme="@style/AppTheme.PopupOverlay"
/>

答案 1 :(得分:0)

在Android Studio中创建新的Blank Activity项目时,它会创建一个包含以下内容的styles.xml。我认为最后两行在主题级别实现了你想要的东西:

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />