как изменить цвет значка навигации и текста по умолчанию ActionMode

Я хочу изменить цвет значка навигации ActionMode. Я могу изменить цвет фона ActionMode, но я не знаю, как изменить цвет навигации ActionMode.

Изображение : https://ibb.co/tP1p90T

Я хочу изменить цвет обратной навигации и индикатор выбранного номера.

Класс ActionMode:

  private class ActionModeCallback implements ActionMode.Callback {
        @Override
        public boolean onCreateActionMode(ActionMode mode, Menu menu) {
            Tools.setSystemBarColor(MainActivity.this, R.color.colorDarkBlue2);
            mode.getMenuInflater().inflate(R.menu.menu_delete, menu);
            return true;
        }

        @Override
        public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
            return false;
        }

        @Override
        public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
            int id = item.getItemId();
            if (id == R.id.action_delete) {
                deleteInboxes();
                mode.finish();
                return true;
            }
            return false;
        }

        @Override
        public void onDestroyActionMode(ActionMode mode) {
            recycleAdapter.clearSelections();
            actionMode = null;
            Tools.setSystemBarColor(MainActivity.this, R.color.colorPrimary);
        }
    }

Класс инструментов:

public class Tools {

    public static void setSystemBarColor(Activity act, @ColorRes int color) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            Window window = act.getWindow();
            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            window.setStatusBarColor(act.getResources().getColor(color));
        }
    }

}

person earthling    schedule 05.07.2019    source источник


Ответы (1)


Вы можете изменить цвет ActionMode, как

Способ 1 (больше настройки)

<style name="AppTheme" parent="Theme.AppCompat.Light">
    ...

    <!--<item name="actionModeBackground">@color/colorAccent</item>--> <!-- 1 option to change background of ActionMode -->

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

<style name="ActionModeStyle" parent="@style/Widget.AppCompat.ActionMode">
    <item name="background">@color/colorAccent</item> <!-- 2 option to change background of ActionMode -->
    <item name="titleTextStyle">@style/ActionModeTitleStyle</item>
    <item name="closeItemLayout">@layout/layout_close</item> 
</style>

<style name="ActionModeTitleStyle">
    <item name="android:textSize">20sp</item>
    <item name="android:textColor">#0f0</item> 
</style>

layout_close.xml

<?xml version="1.0" encoding="utf-8"?>
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
           xmlns:app="http://schemas.android.com/apk/res-auto"
           xmlns:tools="http://schemas.android.com/tools" android:id="@+id/action_mode_close_button"
           style="?attr/actionModeCloseButtonStyle"
           android:layout_width="wrap_content"
           android:layout_height="match_parent"
           android:layout_marginEnd="16dip"
           android:layout_marginRight="16dip"
           android:clickable="true"
           android:focusable="true"
           android:paddingStart="8dp"
           android:paddingEnd="8dp"
           android:tint="#00f"
           app:srcCompat="?attr/actionModeCloseDrawable" tools:ignore="ContentDescription"/>

Результат

Способ 2

Вы можете изменить их в основном приложении (если это возможно).
Например, теперь я думаю, что вы используете Theme.AppCompat.Light, поэтому цвет значка навигации и заголовка BLACK

Если вы измените тему на Theme.AppCompat.Light.DarkActionBar и Theme.AppCompat.NoActionBar, значок навигации и цвет заголовка станут WHITE

Пример результата Theme.AppCompat.Light.DarkActionBar

Надеюсь, это поможет

person Linh    schedule 05.07.2019
comment
Я сделал собственный стиль для actionMode, но он не сработал, возможно, потому, что нет макета для этого стиля. и спасибо за второй способ, я узнаю что-то новое - person earthling; 05.07.2019
comment
Я совершенно уверен, что способ 1 будет работать, потому что я сделал это (с изображением результата). Можете ли вы снова опубликовать это в своем вопросе, и я могу проверить, почему это не работает в вашем случае? - person Linh; 05.07.2019