18

我知道android:actionModeBackground可以在 XML 主题中使用它。

有没有办法在代码中设置这个背景?

基本上我需要ActionMode等价于

getActionBar().setBackgroundDrawable(drawable);
4

3 回答 3

2

我在反思的帮助下弄清楚了。因为我没有操作栏

public static void setActionModeBackgroundColor(ActionMode actionMode, int color) {
        try {
            StandaloneActionMode standaloneActionMode = (StandaloneActionMode) actionMode;
            Field mContextView = StandaloneActionMode.class.getDeclaredField("mContextView");
            mContextView.setAccessible(true);
            Object value = mContextView.get(standaloneActionMode);
            ((View) value).setBackground(new ColorDrawable(color));
        } catch (Throwable ignore) {
        }
    }

ActionMode 也有 2 个实现:StandaloneActionMode 和 ActionModeImpl。此示例仅适用于第一个。对于第二个,它将是相同的

于 2017-04-19T08:04:22.847 回答
2

在使用 Android Studio 3.4.2 的 Kotlin 中:

(actionMode as? StandaloneActionMode).let {
    val contextView = it?.javaClass?.getDeclaredField("mContextView")
    contextView?.isAccessible = true

    val standActionMode = contextView?.get(it)
    val color = ContextCompat.getColor(context, R.color.colorResId)
    (standActionMode as? View)?.setBackgroundColor(color)
}

actionMode转换为StandaloneActionMode,不要忘记导入ActionModefromandroidx.appcompat.view.ActionMode而不是 from android.view.ActionMode

于 2019-08-20T17:58:32.160 回答
0

您可以使用此 action_context_bar 获取 ActionMode id

   int amId = getResources().getIdentifier("action_context_bar", "id", "android");
   View view= findViewById(amId);
   view.setBackground(actionModeBackground);
于 2015-08-09T14:05:45.527 回答