как настроить контекстную панель действий с помощью appCompat в материальном дизайне

MainActivity.java

Я реализовал MultiChoiceModeListener в этом классе, и ниже приведен код:

on listView:

listView.setMultiChoiceModeListener(MainActivity.this);
listView.setChoiceMode(listView.CHOICE_MODE_MULTIPLE_MODAL);


    @Override
    public boolean onActionItemClicked(ActionMode arg0, MenuItem arg1) {
        switch (arg1.getItemId()) {
        case R.id.save:

            // Close CAB
            arg0.finish();
            return true;

        case R.id.saveto:


            // Close CAB
            arg0.finish();
            return true;
        default:
            return false;
        }
    }

    @Override
    public boolean onCreateActionMode(ActionMode arg0, Menu arg1) {
        arg0.getMenuInflater().inflate(R.menu.save_menu, arg1);
        return true;

    }

    @Override
    public void onDestroyActionMode(ActionMode arg0) {
        listadaptor.removeSelection();
    }

    @Override
    public boolean onPrepareActionMode(ActionMode arg0, Menu arg1) {
        return false;
    }

    @Override
    public void onItemCheckedStateChanged(ActionMode arg0, int arg1, long arg2,
            boolean arg3) {

        final int checkedCount = listView.getCheckedItemCount();
        arg0.setTitle(checkedCount + " "+getResources().getString(R.string.selected));
        listadaptor.toggleSelection(arg1);
    }

стиль.xml

 <style name="AppTheme.Base" parent="Theme.AppCompat.Light">
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/White</item>
        <item name="android:windowNoTitle">true</item>
        <item name="windowActionModeOverlay">true</item>
        <item name="windowActionBar">false</item>
        <item name="actionModeStyle">@style/LStyled.ActionMode</item>
    </style>

    <!-- Application theme. -->
    <style name="AppTheme" parent="AppTheme.Base">
        <!-- All customizations that are NOT specific to a particular API-level can go here. -->
    </style>

    <style name="LStyled.ActionMode" parent="@style/Widget.AppCompat.ActionMode">
        <item name="background">@color/colorPrimary</item>
    </style>

    <style name="ActionBarThemeOverlay" parent="Theme.AppCompat.Light">
        <item name="android:textColorPrimary">#fff</item>
        <item name="colorControlNormal">#fff</item>
        <item name="colorControlHighlight">#3fff</item>
    </style>

    <style name="HeaderBar">
        <item name="android:background">#009688</item>
        <item name="android:textStyle">bold</item>
    </style>

    <style name="ActionBarPopupThemeOverlay" parent="ThemeOverlay.AppCompat.Light">
        <item name="android:textColor">#000</item>
    </style>

ниже мои скриншоты:

это мой экран дизайна материалов

экран дизайна материала в режиме действия

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


person Sagar Maiyad    schedule 13.12.2014    source источник
comment
Можете ли вы объяснить, почему вы ставите отрицательный голос на этот вопрос?   -  person Sagar Maiyad    schedule 13.12.2014
comment
Не понимаю, почему проголосовали против. Проголосовали за.   -  person Gil Julio    schedule 13.12.2014
comment
Вы получили ответ на это?   -  person krisDrOid    schedule 05.02.2015
comment
да, ниже принятый ответ.   -  person Sagar Maiyad    schedule 06.02.2015
comment
@Riser Как ты получил название в белом цвете   -  person Prabs    schedule 03.09.2015
comment
Этот вопрос мне очень помог. Теперь я могу поместить режим действия над панелью действий и сохранить setMultiChoiceModeListener.   -  person pengguang001    schedule 17.03.2016


Ответы (3)


Вы можете изменить фон ActionMode через атрибут actionModeStyle:

<style name="AppTheme.Base" parent="Theme.AppCompat.Light">
    ....
    ....
    <item name="actionModeStyle">@style/LStyled.ActionMode</item>
</style>

<style name="LStyled.ActionMode" parent="@style/Widget.AppCompat.ActionMode">
    <item name="background">@color/color_action_mode_bg</item>
</style>

Вам, конечно, потребуется определить цвет с именем color_action_mode_bg:

<color name="color_action_mode_bg">#009688</color>

Есть и другие вещи, которые вы можете изменить. Пример:

<item name="titleTextStyle">...</item>
<item name="subtitleTextStyle">...</item>
<item name="height">...</item>

Чтобы изменить цвет текста SAVE и SAVETO, добавьте к AppTheme.Base следующее:

<item name="actionMenuTextColor">@color/color_action_mode_text</item>
person Vikram    schedule 17.12.2014
comment
я тоже пробовал это .. проверьте мой отредактированный файл style.xml. но все еще не работает. - person Sagar Maiyad; 18.12.2014
comment
@MunimJi Как начать это ActionMode? Можете ли вы поделиться этим кодом? Если вы используете startActionMode(...), вам нужно изменить его на startSupportActionMode(...). - person Vikram; 18.12.2014
comment
проверьте мой отредактированный вопрос. я добавил код класса активности. - person Sagar Maiyad; 18.12.2014
comment
@MunimJi Именно так я реализовал множественный выбор. У вас есть несколько папок values-vXX? В этом случае попробуйте переместить <item name="actionModeStyle">@style/LStyled.ActionMode</item> с <style name="AppTheme.Base"...... на <style name="AppTheme"..... - person Vikram; 18.12.2014
comment
@MunimJi Последняя попытка: добавьте android:theme="@style/AppTheme.Base" к тегу <activity ... /> в манифесте Android. Это проверит, действительно ли ваша активность получает правильную тему. Если это сработает, мы сможем отследить реальную проблему. - person Vikram; 18.12.2014
comment
сделал это ... все еще не работает ... вы хотите увидеть весь мой файл style.xml? - person Sagar Maiyad; 18.12.2014
comment
Давайте продолжим обсуждение в чате. - person Vikram; 18.12.2014
comment
@Vikram Как сделать заголовок белым. mode.setTitle("Select Items"); Выбранные элементы должны быть белого цвета - person Prabs; 03.09.2015
comment
@Prabs Вы должны иметь возможность установить <item name="titleTextStyle">...</item> под LStyled.ActionMode. Значение, предоставленное titleTextStyle, будет стилем, унаследованным от TextAppearance.AppCompat.Widget.ActionMode.Title. Внутри этого стиля переопределите android:textColor и назначьте ему @android:color/white. - person Vikram; 05.09.2015
comment
как изменить цвет фона и цвет текста элементов меню переполнения в CAB? - person Mihir Shah; 30.09.2015
comment
@MihirShah С какими версиями API вы работаете? А как запустить режим действия? - person Vikram; 30.09.2015
comment
ActionMode actionMode = mActivity.startSupportActionMode(this); леденец 5.1 API - person Mihir Shah; 30.09.2015
comment
@MihirShah Хорошо. Какова родительская тема вашей деятельности? Theme.AppCompat? - person Vikram; 30.09.2015
comment
‹style name=AppBaseTheme parent=Theme.AppCompat.Light.NoActionBar›‹/style› ‹style name=AppTheme parent=@style/AppBaseTheme› ‹item name=actionModeStyle›@style/LStyled.ActionMode‹/item›‹/style › - person Mihir Shah; 30.09.2015
comment
‹style name=LStyled.ActionMode parent=Widget.AppCompat.ActionMode› ‹item name=background›@color/header_background‹/item› ‹item name=actionMenuTextColor›@color/white‹/item› ‹item name=actionOverflowButtonStyle›@ style/OverflowMenu1‹/item› ‹/style› ‹style name=OverflowMenu1 parent=Widget.AppCompat.ActionButton.Overflow› ‹item name=android:background›@color/white‹/item› ‹item name=actionMenuTextColor›@color /black‹/item› ‹item name=android:textColor›@color/black‹/item› ‹!-- Требуется для Lollipop. --> - person Mihir Shah; 30.09.2015
comment
что здесь за ошибка для overflowmenu? невозможно изменить цвет фона меню переполнения и цвет текста элементов. по умолчанию темно-серый фон и белый текст. мне нужен белый фон и черный цвет текста для пунктов меню переполнения - person Mihir Shah; 30.09.2015
comment
@MihirShah Давайте поговорим здесь: Ссылка. - person Vikram; 30.09.2015
comment
Атрибут высоты @Vikram у меня не работает. Кто-нибудь знает, как увеличить высоту actionMode? - person Ajinkya; 16.06.2016

используйте actionModeBackground в стиле AppTheme.Base.

<item name="actionModeBackground">@color/colorPrimary </item> (or)
<item name="android:actionModeBackground">@color/colorPrimary </item>
person Dharani Kumar    schedule 14.12.2014
comment
Работает как на Lollipop, так и на KitKat. - person Meanman; 02.03.2015
comment
как изменить цвет фона и цвет текста элементов меню переполнения в CAB? - person Mihir Shah; 30.09.2015

Чтобы изменить цвет заголовка контекстной панели действий, это был единственный метод, который сработал для меня:

Напишите это в теме вашей деятельности

<item name="actionModeStyle">@style/ContextualActionModeTheme</item>

Определите стили

<style name="ContextualActionModeTheme" parent="@style/Widget.AppCompat.ActionMode">
       <item name="titleTextStyle">@style/titleColor</item>
</style>
<style name="titleColor" parent="TextAppearance.AppCompat.Widget.ActionMode.Title">
       <item name="android:textColor">@color/your_color_here</item>
</style>

Цвет заголовка вашей контекстной панели действий будет изменен.

person Hissaan Ali    schedule 16.11.2019