Проблемы стилизации фона ActionBar с Drawable - PullRequest
0 голосов
/ 24 сентября 2018

Я пытался добавить изображение в фон ActionBar, используя эту тему / стиль

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

Но, хотя фон меняется, это создает странный эффект для заголовка и кнопки меню.Похоже, что они являются отдельными дочерними представлениями в ActionBar (возможно, они есть, я не уверен), и Drawable применяется к ним индивидуально.

Я надеялся на бесшовное Drawable, применяемое через ActionBar,Возможно ли это или я должен просто сдаться, и вместо этого просто изменить фон с плоским цветом?

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 голосов
/ 24 сентября 2018

Когда вы устанавливаете атрибут 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">
0 голосов
/ 24 сентября 2018

Это пример панели инструментов AppCompat-v7 , другая Панель инструментов немного отличается, когда речь идет о теме.

Я не могу на самом деледать вам ответ, который вам больше всего подходит, и этот код только здесь, чтобы показать вам путь.

Что изменилось, так это то, что панель инструментов использует style вместо android:theme и использует новыйstyle 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>
0 голосов
/ 24 сентября 2018
"android:background" 

в вашем стиле измените фон для каждого компонента в макете.Вы можете изменить цвет вашего ActionBar следующим образом.

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