如何更改导航图标的颜色和ActionMode的默认文本

时间:2019-07-05 05:10:22

标签: android android-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));
        }
    }

}

1 个答案:

答案 0 :(得分: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.DarkActionBarTheme.AppCompat.NoActionBar,则导航图标和标题颜色将变为WHITE

Theme.AppCompat.Light.DarkActionBar

的示例结果

希望有帮助