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

MainActivity.java

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

на 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);
    }

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

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

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

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

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

2 ответа

Решение

Вы можете изменить 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>

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

<item name="actionModeBackground">@color/colorPrimary </item> (or)
<item name="android:actionModeBackground">@color/colorPrimary </item>

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

Напишите это в теме вашего занятия

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

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

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