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. Это принесло мне желаемый результат.

Другие вопросы по тегам