Установка цвета фона панели инструментов на основе атрибута темы приводит к сбою приложения

Итак, я устанавливаю цвет панели инструментов, выбирая тему из настроек... цвет должен быть color_primary. Когда я устанавливаю «?attr/color_primary» в качестве фона панели инструментов, приложение вылетает с этой ошибкой: https://github.com/Heromine/tempapp1/issues/5 (я публикую ссылку, потому что я получаю сообщение об ошибке, вставив сюда ошибку, извините)

Итак, вот файл styles.xml с темами:

<resources xmlns:tools="http://schemas.android.com/tools">


<!-- Activity themes -->

<style name="Dark" parent="Theme.AppCompat" />




<!-- Application themes. -->
<style name="AppBaseTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!--
        Theme customizations available in newer API levels can go in
        res/values-vXX/styles.xml, while customizations related to
        backward-compatibility can go here.
    -->
    <item name="android:navigationBarColor">?attr/color_primary</item>
</style>



<!-- Application themes. -->
<style name="AppTheme.Brown" parent="AppBaseTheme">
    <!-- All customizations that are NOT specific to a particular API-level can go here. -->

    <item name="color_primary_dark">@color/minecraft_brown_dark_dirt_light</item>
    <item name="color_primary">@color/minecraft_brown_dirt_darkest</item>
    <item name="color_accent">@color/minecraft_green_grass_lightest</item>
    <item name="color_drawer_divider">?attr/color_primary_dark</item>
    <item name="android:textColorLink">?attr/color_primary</item>
    <item name="color_preferences">@color/minecraft_brown_dirt_light</item>

    <!--   your app branding color for the app bar -->
    <item name="colorPrimary">?attr/color_primary</item>

    <!--   darker variant for the status bar and contextual app bars -->
    <item name="colorPrimaryDark">?attr/color_primary_dark</item>

    <!--   theme UI controls like checkboxes and text fields -->
    <item name="colorAccent">?attr/color_accent</item>

</style>


<style name="AppTheme.Green" parent="AppBaseTheme">
    <!-- All customizations that are NOT specific to a particular API-level can go here. -->

    <item name="color_primary_dark">@color/minecraft_green_cactus_darkest</item>
    <item name="color_primary">@color/minecraft_green_cactus_light</item>
    <item name="color_accent">@color/minecraft_brown_dirt_dark</item>
    <item name="color_drawer_divider">@color/minecraft_green_grass_lightest</item>
    <item name="android:textColorLink">?attr/color_primary</item>
    <item name="color_preferences">?attr/color_primary</item>

    <!--   your app branding color for the app bar -->
    <item name="colorPrimary">?attr/color_primary</item>

    <!--   darker variant for the status bar and contextual app bars -->
    <item name="colorPrimaryDark">?attr/color_primary_dark</item>

    <!--   theme UI controls like checkboxes and text fields -->
    <item name="colorAccent">?attr/color_accent</item>

</style>


<style name="PreferenceFragmentTheme" parent="AppBaseTheme">
    <item name="colorAccent">@color/minecraft_brown_dirt_light</item>
    <item name="android:textColor">@color/extracted_primary_text_default_material_light</item>
    <item name="android:textColorSecondary">@color/extracted_secondary_text_default_material_light</item>
</style>


           <!-- LOOK HERE -->
<style name="ToolBarStyle" parent="Widget.AppCompat.ActionBar">
    <item name="android:background">?attr/color_primary</item>
    <item name="theme">@style/ToolBarTheme</item>
    <item name="popupTheme">@style/ToolBarPopupTheme</item>
    <item name="titleTextAppearance">@style/ToolBarTitleTheme</item>
    <item name="android:elevation" tools:targetApi="21">@dimen/elevation_default</item>
</style>

<style name="ToolBarTheme" parent="ThemeOverlay.AppCompat.ActionBar">
    <item name="android:textColorPrimary">@color/toolbar_title_text_color</item>
</style>

<style name="ToolBarTitleTheme" parent="TextAppearance.Widget.AppCompat.Toolbar.Title">
    <item name="android:textStyle">normal</item>
</style>

<style name="ToolBarPopupTheme" parent="ThemeOverlay.AppCompat.Dark">
    <item name="android:colorBackground">@color/minecraft_green_cactus_light</item>
</style>



<style name="CardViewStyle" parent="CardView.Light">
    <item name="cardUseCompatPadding">true</item>
    <item name="cardBackgroundColor">@color/white</item>
    <item name="cardElevation">4dp</item>
    <item name="cardCornerRadius">4dp</item>
</style>



<style name="ButtonTransparentStyle" parent="android:Widget.DeviceDefault.Button.Borderless">
    <item name="android:textColor">@color/extracted_secondary_text_default_material_light</item>
    <item name="android:textAllCaps">true</item>
    <item name="android:textAppearance">?android:attr/textAppearanceButton</item>
</style>

attrs.xml:

<?xml version="1.0" encoding="utf-8"?>

<attr name="color_primary" format="color|reference" />
<attr name="color_primary_dark" format="color|reference" />
<attr name="color_accent" format="color|reference" />
<attr name="color_drawer_divider" format="color|reference" />
<attr name="color_preferences" format="color|reference" />

цвет.xml

<resources>

<color name="window_background">#CC000000</color>
<color name="greenactbar">#00ff11</color>
<item name="blue" type="color">#FF33B5E5</item>
<item name="purple" type="color">#FFAA66CC</item>
<item name="green" type="color">#FF99CC00</item>
<item name="orange" type="color">#FFFFBB33</item>
<item name="red" type="color">#FFFF4444</item>
<item name="darkblue" type="color">#FF0099CC</item>
<item name="darkpurple" type="color">#FF9933CC</item>
<item name="darkgreen" type="color">#FF669900</item>
<item name="darkorange" type="color">#FFFF8800</item>
<item name="darkred" type="color">#FFCC0000</item>
<item name="black" type="color">#FF000000</item>
<item name="white" type="color">#FFFFFFFF</item>

<item name="minecraft_button_background_not_pressed" type="color">#FF958681</item>
<item name="minecraft_button_background_pressed" type="color">#FF716567</item>
<item name="minecraft_button_text" type="color">#FFDEDEDE</item>
<item name="minecraft_button_text_shadow" type="color">#FF393939</item>
<item name="minecraft_button_light" type="color">#FFBCB1AB</item>
<item name="minecraft_button_dark" type="color">#FF282729</item>

<item name="minecraft_brown_dark_dirt_light" type="color">#FF3A2A1E</item>
<item name="minecraft_brown_dirt_darkest" type="color">#FF583D2B</item>
<item name="minecraft_brown_dirt_dark" type="color">#FF78543C</item>
<item name="minecraft_brown_dirt_light" type="color">#FF956B4D</item>
<item name="minecraft_brown_dirt_lightest" type="color">#FFB88460</item>

<item name="minecraft_green_grass_darkest" type="color">#FF406129</item>
<item name="minecraft_green_grass_dark" type="color">#FF476D2D</item>
<item name="minecraft_green_grass_light" type="color">#FF537D35</item>
<item name="minecraft_green_grass_lightest" type="color">#FF679940</item>

<item name="minecraft_green_cactus_darkest" type="color">#FF116120</item>
<item name="minecraft_green_cactus_light" type="color">#FF17832A</item>
<item name="minecraft_green_cactus_lightest" type="color">#FF199130</item>


<!-- colors of element of the app -->
<color name="toolbar_title_text_color">@color/white</color>
<color name="tabs_indicator_color">@color/white</color>
<color name="tabs_selected_text_color">@color/white</color>
<color name="tabs_not_selected_text_color">@color/minecraft_button_light</color>
<color name="drawer_text_shadow_color" type="color">#FF292929</color>
<color name="text_changelog_color" type="color">#FFA5A5A5</color>

<!-- colors used for the Settings page, on pre-lollipop devices the colors were different -->
<color name="extracted_primary_text_default_material_light">#de000000</color>
<color name="extracted_secondary_text_default_material_light">#8a000000</color>
<color name="material_deep_purple_500">@color/purple</color>
<color name="lannister">@color/purple</color>
<color name="textBackground">#8a000000</color>



<integer-array name="androidcolors">
    <item>@color/blue</item>
    <item>@color/purple</item>
    <item>@color/green</item>
    <item>@color/orange</item>
    <item>@color/red</item>
    <item>@color/darkblue</item>
    <item>@color/darkpurple</item>
    <item>@color/darkgreen</item>
    <item>@color/darkorange</item>
    <item>@color/darkred</item>
    <item>@color/black</item>
    <item>@color/white</item>
</integer-array>



</resources>

Макет:

<?xml version="1.0" encoding="utf-8"?>

<android.support.v7.widget.Toolbar
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    style="@style/ToolBarStyle"
    android:id="@+id/toolbar"/>

<com.astuetz.PagerSlidingTabStrip
    android:id="@+id/tabs"
    android:layout_width="match_parent"
    android:layout_height="48dip" />

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

        <android.support.v4.view.ViewPager
            android:id="@+id/pager"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_alignParentTop="true" />

</RelativeLayout>

И я на Android 5.0.2, не нужно отвечать за версию до леденца


person Jonathan I    schedule 03.08.2015    source источник
comment
Вы не можете ссылаться на атрибуты стиля в файле ресурсов цветов, по крайней мере, до леденца. Вы можете ссылаться только на атрибуты стиля в стилях и макетах.   -  person BladeCoder    schedule 05.08.2015
comment
Я в леденце, а приложение для Android 5+   -  person Jonathan I    schedule 06.08.2015
comment
После проверки: на Lollipop вы можете сделать это внутри ресурсов, доступных для рисования, но не в ресурсах цвета, поэтому мое замечание остается в силе.   -  person BladeCoder    schedule 06.08.2015
comment
но это то, что я делаю, я ссылаюсь на color_primary, который отличается, если я выберу зеленую или коричневую тему, посмотрите на styes.xml   -  person Jonathan I    schedule 11.08.2015
comment
В color.xml вы не можете не ссылаться на атрибут стиля, только на простые цвета. Должно быть наоборот: в атрибуте стиля вы ссылаетесь на цвет. Я не знаю, как лучше объяснить.   -  person BladeCoder    schedule 11.08.2015
comment
я понимаю, это то, что я делаю, color.xml не имеет ссылки и не ссылается на styles.xml, кстати, styles.xml имеет ссылку на color.xml   -  person Jonathan I    schedule 12.08.2015
comment
Я видел, что вы отредактировали код colors.xml в своем вопросе, и теперь он выглядит правильно.   -  person BladeCoder    schedule 12.08.2015
comment
да, потому что я думал, что это сбивает вас с толку. я не использовал, это был только старый тест, в настоящее время я им не пользуюсь, и кажется, что он еще не работает.   -  person Jonathan I    schedule 12.08.2015
comment
У вас все еще такая же авария? Опубликованная вами трассировка стека указывает на то, что фоновое изображение панели инструментов не может быть разрешено.   -  person BladeCoder    schedule 12.08.2015
comment
один и тот же сбой каждый раз, я также пытался изменить другую вещь, чтобы увидеть, является ли это ошибкой панели инструментов, но это не так, это ошибка атрибута   -  person Jonathan I    schedule 13.08.2015
comment
Возможно, попробуйте изменить определения пользовательских атрибутов на format="color" (без ссылки). Или удалите дубликаты (color_primary, кажется, делает то же самое, что и colorPrimary AppCompat)   -  person BladeCoder    schedule 13.08.2015


Ответы (1)


Вы должны установить фон панели инструментов на цвет, который вы хотите, например:

            <android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/your_primary_color"
android:id="@+id/toolbar"/>

Или вы можете изменить это программно с помощью метода setBackground()... здесь нет необходимости использовать attrs... но если вам нужно использовать attrs, то appcompat позволяет использовать его в более старых версиях Android, просто удалив "android:" такой префикс: "?attr/your_attr"

person Turki Alkhateeb    schedule 05.08.2015
comment
Вы используете appcompat? - person Turki Alkhateeb; 05.08.2015
comment
В любом случае вы можете попробовать установить цвет фона, используя @color/ - person Turki Alkhateeb; 05.08.2015
comment
я использую Widget.AppCompat.ActionBar, как вы можете видеть, так как я использую темы, если я устанавливаю обычный @color/... он не изменится при смене темы, поэтому я должен использовать ?attr/... - person Jonathan I; 05.08.2015
comment
Вполне допустимо использовать атрибут стиля для ссылки на цвет фона в макете, но недопустимо использовать атрибут стиля в качестве определения цвета в color.xml. Цветовые ресурсы должны содержать неизменяемые цвета, которые затем можно выбрать в своей теме, а затем ссылаться на них в качестве атрибутов стиля в макетах. - person BladeCoder; 06.08.2015
comment
Это то, что я пытаюсь сделать, проверьте xml (не смотрите на первые 4 строки, они не используются) - person Jonathan I; 11.08.2015