web-dev-qa-db-fra.com

comment personnaliser la barre d'actions contextuelles en utilisant appCompat dans la conception des matériaux

MainActivity.Java

J'ai implémenté MultiChoiceModeListener dans cette classe et voici le code:

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

ci-dessous est mes captures d'écran:

this is my material design screen

actionmode material design screen

vous pouvez voir les deux captures d'écran, dans la deuxième capture d'écran, l'arrière-plan du mode d'action est blanc et la couleur du texte est également blanche .. je veux la changer en première couleur de capture d'écran qui est en haut.

41
Sagar Maiyad

Vous pouvez modifier l'arrière-plan ActionMode via l'attribut 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>

Vous devrez bien sûr définir une couleur nommée color_action_mode_bg:

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

Il y a aussi d'autres choses que vous pouvez changer. Exemple:

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

Pour modifier la couleur du texte de SAVE et SAVETO, ajoutez ce qui suit à AppTheme.Base:

<item name="actionMenuTextColor">@color/color_action_mode_text</item>
86
Vikram

utilisez actionModeBackground dans votre style AppTheme.Base .

<item name="actionModeBackground">@color/colorPrimary </item> (or)
<item name="Android:actionModeBackground">@color/colorPrimary </item>
32
Dharani Kumar