Панель действий отображается разными цветами в разных версиях Android

Я знаю, что вопрос кажется простым, но не таким, как здесь раньше. Итак, вот:

В моем приложении для Android, использующем библиотеку поддержки с AppCompat v7, добавлена ​​панель действий. Все работает отлично, за исключением того, что при запуске приложения на андроиде 2.3 фон ActionBar темный, а при прошивке андроида 4.0.2 ActionBar этот фон становится серым.

Ниже показано, как определить мой @style

<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>

как я могу это решить?

введите здесь описание изображениявведите здесь описание изображения


person Walter Gandarella    schedule 12.10.2013    source источник
comment
Разве нельзя установить цвет фона, который вы хотите, с помощью кода? Такой, чтобы он оставался одинаковым на любом устройстве?   -  person Rat-a-tat-a-tat Ratatouille    schedule 12.10.2013
comment
На самом деле, изменение цветового кода работает да, но хотелось бы получить пояснение по этому поводу.   -  person Walter Gandarella    schedule 12.10.2013


Ответы (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>
person android_guy    schedule 12.10.2013
comment
Это работает хорошо для меня. Но есть также возможность использовать этот инструмент в Интернете для настройки вашей темы: jgilfelt.github.io /android-actionbarstylegenerator - person Walter Gandarella; 12.10.2013
comment
@WalterBarreiroNeto На самом деле хороший инструмент. - person android_guy; 12.10.2013

Я хотел бы добавить свое наблюдение (используя min sdk 8, target sdk 19) для будущих читателей по этому вопросу.

  • Если вы хотите установить только цвет фона панели действий в разных версиях Android, проще сделать это в коде.

    actionBar = получитьSupportActionBar(); 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 и background на android:background. Это принесло мне желаемый результат.

person Dexter    schedule 20.06.2014