使用Drawable样式化ActionBar背景的问题

时间:2018-09-23 22:15:42

标签: android android-actionbar android-theme

我尝试使用此主题/样式将图像添加到ActionBar背景

<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
    <item name="android:background">@drawable/actionbar_background</item>
</style>

但是,尽管背景发生了变化,但却在标题和菜单按钮上产生了怪异的效果。可以认为它们是ActionBar中单独的子视图(也许我不确定),并且Drawable分别应用于它们。

我希望在ActionBar上应用无缝的Drawable。这是可能的还是我应该放弃,而是只用纯色更改背景?

Problems in the black circles

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/layout_activity_main"
    tools:context=".MainActivity">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/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="?attr/actionBarSize"
            app:popupTheme="@style/AppTheme.PopupOverlay" />

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

    <include layout="@layout/content_main" />

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

styles.xml

<resources xmlns:tools="http://schemas.android.com/tools">
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="coordinatorLayoutStyle">@style/Widget.Support.CoordinatorLayout</item>
        <item name="colorAccent">@android:color/black</item>
        <item name="colorPrimary">@android:color/holo_blue_dark</item>
        <item name="colorPrimaryDark">@android:color/holo_blue_dark</item>
        <item name="android:textColor">@android:color/white</item>
        <item name="android:textColorSecondary">@android:color/white</item>
        <item name="android:textColorHint">@android:color/white</item>
    </style>

    <style name="AppTheme.NoActionBar">
        <item name="android:windowBackground">@drawable/no_actionbar_background</item>
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
    </style>

    <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
        <item name="android:background">@drawable/actionbar_background</item>
    </style>

    <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light">
        <item name="android:background">@android:color/black</item>
    </style>
</resources>

3 个答案:

答案 0 :(得分:0)

"android:background" 

以您的样式将背景更改为布局中的每个组件。 您可以通过以下方式更改ActionBar的颜色。

<item name="android:navigationBarColor">@color/colorPrimary</item>

答案 1 :(得分:0)

设置视图的android:theme属性时,您传递的样式将应用于该视图及其所有子视图。就您而言,AppBarLayout确实(内部)为标题和溢出菜单按钮使用了单独的视图。

但是,由于您的样式似乎唯一要做的就是设置android:background属性,因此可以直接在AppBarLayout上进行设置。因此,替换为:

<android.support.design.widget.AppBarLayout
    android:id="@+id/appBarLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/AppTheme.AppBarOverlay">

与此:

<android.support.design.widget.AppBarLayout
    android:id="@+id/appBarLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/actionbar_background">

答案 2 :(得分:0)

这是AppCompat-v7 Toolbar的示例,其他Toolbar在主题方面有些不同。

我无法真正给出最适合您的答案,而此代码只是在这里向您展示方法。

变化之处在于工具栏正在使用style而不是android:theme,并且使用了新样式AppTheme.Toolbar

AppTheme.Toolbar将您的自定义背景,工具栏内视图的主题(标题,副标题等)和弹出菜单的主题进行分组。

孩子的主题和弹出菜单是分开的,因此您可以分别控制每个组件。

尝试使用其parent属性(从黑暗到明亮),然后选择最适合您的东西。

进入您的styles.xml

<style name="AppTheme.Toolbar">
    <item name="android:background">@drawable/actionbar_background</item>
    <item name="popupTheme">@style/AppTheme.PopupOverlay</item>
    <item name="android:theme">@style/AppTheme.AppBarOverlay</item>
</style>

<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
    <!-- Change attribute of the toolbar views-->
</style>

<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Dark">
    <!--Change attribute of the menu-->
</style>

进入您的activity_main.xml

<android.support.design.widget.AppBarLayout
    android:id="@+id/appBarLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        style="@style/AppTheme.Toolbar"
        android:layout_height="?attr/actionBarSize" />

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