ActionBar появляется в разных цветах с разными версиями Android
Я знаю, что вопрос кажется простым, но здесь нет ничего похожего на chei. Итак, поехали:
В моем приложении для Android, использующем библиотеку поддержки с AppCompat v7, добавлен ActionBar. Все работает отлично, за исключением того, что, когда приложение работает на Android 2.3, фон ActionBar темный, а когда на Squeegee Android 4.0.2 ActionBar этот фон становится серым.
Ниже описано, как определить мой стиль
<resources>
<!--
Base application theme, dependent on API level. This theme is replaced
by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
-->
<style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar">
<!--
Theme customizations available in newer API levels can go in
res/values-vXX/styles.xml, while customizations related to
backward-compatibility can go here.
-->
</style>
<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
<!-- All customizations that are NOT specific to a particular API-level can go here. -->
</style>
</resources>
как я могу решить это?
2 ответа
Это не будет работать для вас с минимальной целью, как 2.3.3, если ваша минимальная цель - API-уровень 11, вы можете изменить цвет фона
<resources>
<style name="AppTheme" parent="@android:style/Theme.Holo.Light">
<item name="android:actionBarStyle">@style/MyActionBar</item>
</style>
<style name="MyActionBar" parent="@android:style/Widget.Holo.Light.ActionBar">
<item name="android:background">ANY_HEX_COLOR_CODE</item>
</style>
</resources>
Я хотел бы добавить свое наблюдение (используя min sdk 8, target sdk 19) для будущих читателей по этому вопросу.
Если вы хотите установить только цвет фона панели действий для разных версий Android, это проще сделать в коде.
actionBar = getSupportActionBar (); actionBar.setBackgroundDrawable (getResources (). getDrawable (R.color.your_desired_color));
Это переопределяет фон по умолчанию в разных версиях и устанавливает желаемый цвет.
Примечание: я видел на разных постах и пытался установить цвет фона следующим образом:
ColorDrawable colorDrawable = new ColorDrawable();
colorDrawable.setColor(R.color.your_desired_color);
actionBar.setBackgroundDrawable(colorDrawable);
но это не сработало, причина пока неизвестна. Поэтому я успешно попробовал код, упомянутый выше.
- если вы хотите установить цвет фона панели действий (вместе с другими атрибутами) не в коде, вы можете использовать стиль и тему. Я сделал дизайн следующим образом.
внутри res/values /style.xml
<resources>
<!--
Base application theme for API 11+. This theme completely replaces
AppBaseTheme from res/values/styles.xml on API 11+ devices.
-->
<style name="AppBaseTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- API 11 theme customizations can go here. -->
</style>
<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
<!-- All customizations that are NOT specific to a particular API-level can go here. -->
</style>
<!-- custom theme for my app -->
<style name="MyAppTheme" parent="AppTheme">
<item name="android:actionBarStyle">@style/MyActionBar</item>
</style>
<!-- ActionBar styles -->
<style name="MyActionBar" parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
<item name="android:background">@color/bgcolor</item>
</style>
</resources>
внутри res/values-v11 и res/values-v14
<resources>
<!--
Base application theme for API 11+. This theme completely replaces
AppBaseTheme from res/values/styles.xml on API 11+ devices.
-->
<style name="AppBaseTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- API 11 theme customizations can go here. -->
</style>
<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
<!-- All customizations that are NOT specific to a particular API-level can go here. -->
</style>
<!-- custom theme for my app -->
<style name="MyAppTheme" parent="AppTheme">
<item name="android:actionBarStyle">@style/MyActionBar</item>
</style>
<!-- ActionBar styles -->
<style name="MyActionBar" parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
<item name="android:background">@color/bgcolor</item>
</style>
</resources>
Примечание: так как мне приходилось одинаково искать панель действий в версиях для Android, я скопировал код в res/values-v11 и res/values-v14 из res/values. Но, к моему удивлению, я не получил желаемого результата. Причина? Нам нужно добавить пространство имен "android" перед тэгами для android v11 и более поздних версий. Поэтому я изменил actionBarStyle на android:actionBarStyle и фон на android: background. Это принесло мне желаемый результат.