Поддержка ActionBar не отображает правильный цвет с API 21
Я пытаюсь создать тему appcompat, но цвет не работает, и значок не будет отображаться... возможно, что-то не хватает. Вот мой xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- the theme applied to the application or activity -->
<color name="background_test">#410000</color>
<color name="font_general">#ffffff</color>
<style name="MyTheme"
parent="@style/Theme.AppCompat">
<item name="android:actionBarStyle">@style/MyActionBar</item>
<!-- Support library compatibility -->
<item name="actionBarStyle">@style/MyActionBar</item>
</style>
<style name="AudioFileInfoOverlayText">
<item name="android:paddingLeft">2dp</item>
<item name="android:paddingBottom">2dp</item>
<item name="android:textColor">#ffffffff</item>
<item name="android:textSize">18sp</item>
<item name="android:shadowColor">#000000</item>
<item name="android:shadowDx">1</item>
<item name="android:shadowDy">1</item>
<item name="android:shadowRadius">1</item>
</style>
<!-- general styles for the action bar -->
<style name="MyActionBar"
parent="@style/Widget.AppCompat.Light.ActionBar.Solid">
<item name="android:icon">@drawable/ic_launcher</item>
<item name="icon">@drawable/ic_launcher</item>
<item name="background">@color/background_test</item>
<item name="android:background">@color/background_test</item>
</style>
</resources>
Что я должен добавить, чтобы заставить его работать?
EDIT:
Он не будет работать с панелью инструментов... После того, как я установил:
Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);
setSupportActionBar(toolbar);
Он потеряет всю определенную пользователем тему и получит только родительскую тему... Вот мои xmls (Да, у меня много избыточных/тестовых значений, поскольку я хотел попробовать все)
<android.support.v7.widget.Toolbar
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/my_awesome_toolbar"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:minHeight="?attr/actionBarSize"
background="?attr/colorPrimary"
app:popupTheme="@style/MyActionBarStyle"
android:background="?attr/colorPrimary"
app:theme="@style/MyActionBarStyle"
/>
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" xmlns:android="http://schemas.android.com/apk/res/android">
<!-- the theme applied to the application or activity -->
<color name="background_test">#410000</color>
<color name="font_general">#ffffff</color>
<!-- general styles for the action bar -->
<style name="CustomActionBarTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
<item name="actionBarStyle">@style/MyActionBarStyle</item>
<item name="android:panelColorBackground">@color/background_test</item>
<item name="android:headerBackground">@color/background_test</item>
<item name="android:colorBackground">@color/background_test</item>
<item name="android:backgroundSplit">@color/background_test</item>
<item name="backgroundSplit">@color/background_test</item>
<item name="colorAccent">@color/background_test</item>
<!-- Here we setting appcompat’s actionBarStyle -->
<!-- ...and here we setting appcompat’s color theming attrs -->
<item name="colorPrimary">@color/background_test</item>
<item name="colorPrimaryDark">@color/background_test</item>
</style>
<style name="MyActionBarStyle">
<item name="colorAccent">@color/background_test</item>
<!-- Here we setting appcompat’s actionBarStyle -->
<item name="android:panelColorBackground">@color/background_test</item>
<item name="android:headerBackground">@color/background_test</item>
<item name="android:colorBackground">@color/background_test</item>
<item name="android:backgroundSplit">@color/background_test</item>
<item name="backgroundSplit">@color/background_test</item>
<!-- ...and here we setting appcompat’s color theming attrs -->
<item name="colorPrimary">@color/background_test</item>
<item name="colorPrimaryDark">@color/background_test</item>
<item name="android:background">@color/background_test</item>
<item name="background">@color/background_test</item>
</style>
<style name="AudioFileInfoOverlayText">
<item name="android:paddingLeft">2dp</item>
<item name="android:paddingBottom">2dp</item>
<item name="android:textColor">#ffffffff</item>
<item name="android:textSize">18sp</item>
<item name="android:shadowColor">#000000</item>
<item name="android:shadowDx">1</item>
<item name="android:shadowDy">1</item>
<item name="android:shadowRadius">1</item>
</style>
</resources>
Скриншот:
http://i.imgur.com/4iohVwP.png
Новый EDIT:
Он также не будет работать с кодом...
Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);
setSupportActionBar(toolbar);
ActionBar test=getSupportActionBar();
test.setLogo(R.drawable.ic_launcher); //this is the only one working...
test.setBackgroundDrawable(new ColorDrawable(0x410000));
test.setDisplayShowTitleEnabled(false);
test.setDisplayShowTitleEnabled(true);
EDIT:
Для нового Appcompat-v7 есть некоторые ошибки, это, вероятно, ошибка:
http://code.google.com/p/android/issues/detail?id=77763&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars
Ответы
Ответ 1
Если вы используете Toolbar
, то ваш actionBarStyle
используется не.
Вам нужно просто настроить панель инструментов:
<android.support.v7.widget.Toolbar
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:minHeight="..."
android:background="..."
app:theme="@style/ThemeOverlay.AppCompat.ActionBar"
app:titleTextAppearance="..."
app:subtitleTextAppearance="..." />
Есть больше атрибутов, которые вы можете настроить, это просто примеры.
Я не уверен, почему getSupportActionBar().setBackgroundDrawable(...)
не работает для вас, я просто пробовал его в разных местах, и он отлично работает.
Ответ 2
Это пример:
<style name="Theme.MyTheme" parent="Theme.AppCompat.Light">
<!-- colorPrimary is used for the default action bar background -->
<item name="colorPrimary">@color/my_color</item>
<!-- colorPrimaryDark is used for the status bar -->
<item name="colorPrimaryDark">@color/my_darker_color</item>
<!-- colorAccent is used as the default value for colorControlActivated
which is used to tint widgets -->
<item name="colorAccent">@color/accent</item>
<!-- appcompat’s actionBarStyle -->
<item name="actionBarStyle">@style/MyActionBarStyle</item>
</style>
Также я предлагаю вам использовать новый Toolbar.
Вы можете найти более подробную информацию здесь:
https://chris.banes.me/2014/10/17/appcompat-v21/
Ответ 3
Одно из решений, позволяющее AppCompatActivity использовать основной цвет темы на панели действий для всех уровней api - объявить цвета в та же тема:
<style name="Theme.Custom" parent="Theme.AppCompat">
<!--API < 21 -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="colorButtonNormal">@color/colorButtonNormal</item>
<!-- 21 < API this is probably not needed, included for illustration -->
<item name="android:colorPrimary" tools:ignore="NewApi">@color/colorPrimary</item>
<item name="android:colorPrimaryDark" tools:ignore="NewApi">@color/colorPrimaryDark</item>
<item name="android:colorAccent" tools:ignore="NewApi">@color/colorAccent</item>
<item name="android:colorButtonNormal" tools:ignore="NewApi">@color/colorButtonNormal</item>
</style>
Примечание: не забудьте удалить тему, объявленную в значениях-v21, чтобы это работало