Невозможно стилизовать режим действий при использовании панели инструментов

Я не уверен, является ли это ошибкой или я не правильно использую новый класс панели инструментов.

Я могу успешно создать тему ActionBar напрямую, используя одну из доступных тем. Это также позволяет мне тему ActionMode. Все работает отлично, как и ожидалось. Вот как я это делаю.

<style name="Theme.ActionBar" parent="@style/Theme.AppCompat.Light.DarkActionBar">
        <item name="actionModeBackground">@drawable/action_mode_background</item>
</style>

Теперь я ищу немного больше гибкости, поэтому я пытаюсь использовать новую панель инструментов из библиотеки поддержки. Совершенствуйтесь, панель инструментов реализована и работает нормально, однако теперь режим действий больше не работает, как ожидалось. Пользовательский фон не работает, и панель режимов действия толкает панель инструментов вниз.

Чтобы исправить проблему нажатия, я использовал флаг windowActionModeOverlay, Мне факт, что режим действия не становится частью Панели инструментов, отстой...:/

<style name="Theme.ActionBar" parent="@style/Theme.AppCompat.Light.DarkActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowActionModeOverlay">true</item>
        <item name="actionModeBackground">@drawable/action_mode_background</item>
</style>

В своей деятельности я делаю следующее, чтобы сделать панель инструментов стандартной панелью действий.

Toolbar toolbar = (Toolbar) findViewById(R.id.toolBar);
setSupportActionBar(toolbar);

Прямо сейчас я перепробовал так много вещей. Я даже попытался погрузиться в источник, чтобы выяснить, что происходит.

Есть идеи, почему это происходит? Как я могу стилизовать ActionMode? Или, более конкретно, как я могу изменить фон ActionMode?


Обновление 1
Я заметил, что при добавлении <item name="windowActionBar">false</item> для моей темы деятельности режим действия теряет свою тему, а не имеет значение true. Очевидно, установив его как true, он будет включать панель действий окна.


Обновление 2
Я смог правильно настроить тематический режим, используя пару модов.

  1. Фон режима действия. Оказывается, вы просто устанавливаете фон непосредственно в теме ActionMode как android: background! Также в тексте нужно указать его по теме.

    <item name="actionModeStyle">@style/Widget.ActionMode</item>
    <style name="Widget.ActionMode" parent="@style/Widget.AppCompat.ActionMode"> <item name="android:background">@drawable/action_mode_background</item> <item name="titleTextStyle">@style/TitleTextStyle</item> </style>

  2. Стрелка назад не получает стиль. Я переписал использованный чертеж и просто добавил свой в белом.
    <item name="actionModeCloseDrawable">@drawable/ic_arrow_back_white_24dp</item>

1 ответ

Решение

Что ж, я наконец-то смог правильно стилизовать режим действий после поиска некоторых стилей, тем, атрибутов и кода из библиотеки поддержки.

Прежде чем я предоставлю решение своего вопроса, я должен упомянуть, что, похоже, есть ошибка в библиотеке поддержки. Кажется, теряется установленная тема для режима действия, когда вы скрываете панель действий окна. Я сообщил об ошибке, чтобы увидеть, исправят ли они это или предоставят более подробную информацию.

Таким образом, решение состояло в том, чтобы по существу стилизовать фон, текст и значок закрытия самостоятельно. Для этого необходимо использовать собственный стиль ActionMode и изменить указатель атрибута на значок закрытия.

themes.xml

<style name="Theme.Main.Home">
     <item name="windowActionModeOverlay">true</item>
     <item name="actionModeStyle">@style/Widget.ActionMode</item>
     <item name="actionModeCloseDrawable">@drawable/ic_arrow_back_white_24dp</item>
</style>

styles.xml

<style name="Widget.ActionMode" parent="@style/Widget.AppCompat.ActionMode">
    <item name="android:background">@drawable/action_mode_background</item>
    <item name="titleTextStyle">@style/TitleTextStyle</item>
</style>
  • Фон
    Это было сложно, потому что actionModeBackground не работает для установки фона режима действия. Вы должны изменить фон через стандарт android:background в стиле ActionMode.
  • Текст заголовка
    Простое предоставление общего стиля для titleTextStyle позволило изменить цвет текста.
  • Значок Закрыть
    Скачал иконки материалов и добавил значок закрытия самостоятельно, используя actionModeCloseDrawable атр.
Другие вопросы по тегам