Стилизация ActionBar ActionMode в Android 5.0 Lollipop (с AppCompat)

Я использовал это руководство, чтобы обновить свое приложение Holo для Lollipop: http://android-developers.blogspot.ru/2014/10/appcompat-v21-material-design-for-pre.html

Что я имею:

  1. Тема

    <style name="MyTheme" parent="Theme.AppCompat.Light.NoActionBar">
      <item name="windowActionModeOverlay">true</item>
      <item name="colorPrimary">@color/theme_primary</item>
      <item name="colorPrimaryDark">@color/theme_primary_dark</item>
      <item name="colorAccent">@color/theme_accent</item>
    </style>
    
  2. Макет панели инструментов

    <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto"
      android:id="@+id/toolbar"
      android:layout_height="wrap_content"
      android:layout_width="match_parent"
      android:minHeight="?attr/actionBarSize"
      android:background="?attr/colorPrimary"
      app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
      app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
    
  3. Активность, унаследованная от ActionBarActivity с фрагментом ListFragment в режиме множественного выбора

    getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);

Результат: Панель инструментов в порядке. Он использует выделенные цвета темы, но ActionBar, используемый ListFragment в ActionMode (активируется нажатием и удержанием элемента списка), имеет стандартные цвета Dark.ActionBar. Также всплывающее меню панели действий использует темную тему.

Я пробовал все трюки SO, но до сих пор не могу это решить. Я буду признателен за любую помощь.

КСТАТИ. Я обнаружил, что темные цвета ActionBar вызваны app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" панели инструментов, но понятия не имею, как это решить, потому что этот атрибут необходим для правильного отображения панели инструментов.

Панель инструментов с правильными цветамиТемная панель действий


person Andrey Shcherbakov    schedule 18.11.2014    source источник


Ответы (2)


Просто добавьте эти две строки в тему:

<item name="actionModeBackground">@color/theme_primary_dark</item>
<item name="actionBarPopupTheme">@style/ThemeOverlay.AppCompat.Light</item>
person Andrey Shcherbakov    schedule 18.11.2014
comment
После большого количества времени, потраченного на эту проблему, это действительно работает. Спасибо! - person Sandra; 14.01.2015
comment
Потратил много времени, пытаясь заставить это работать, только чтобы понять, что для того, чтобы заставить это работать на панели инструментов AppCompat, вам придется удалить часть имени элемента android:. Надеюсь, что это поможет другим людям, читающим эту тему :) - person thisbytes; 16.01.2015
comment
Спасибо! а как насчет цвета строки состояния? он становится белым, когда отображается actionmode? - person ; 13.01.2016

Это также может быть полезно в дополнение к ответу @Andrey Shcherbakov, если вы хотите иметь больший контроль над каждым человеком. цвет.

<!-- action bar title text color, icon color (ie: back icon, icons when editing text)-->
<item name="android:textColorPrimary">#FFFF00</item>

<!-- action bar background color-->
<item name="android:colorBackground">#444400</item>

<!-- color of line under contextual action bar-->
<item name="colorControlActivated">#00CC00</item>
person waynesford    schedule 30.09.2015