我知道android:actionModeBackground
可以在 XML 主题中使用它。
有没有办法在代码中设置这个背景?
基本上我需要ActionMode等价于
getActionBar().setBackgroundDrawable(drawable);
我知道android:actionModeBackground
可以在 XML 主题中使用它。
有没有办法在代码中设置这个背景?
基本上我需要ActionMode等价于
getActionBar().setBackgroundDrawable(drawable);
我在反思的帮助下弄清楚了。因为我没有操作栏
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。此示例仅适用于第一个。对于第二个,它将是相同的
在使用 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
,不要忘记导入ActionMode
fromandroidx.appcompat.view.ActionMode
而不是 from android.view.ActionMode
。
您可以使用此 action_context_bar 获取 ActionMode id
int amId = getResources().getIdentifier("action_context_bar", "id", "android");
View view= findViewById(amId);
view.setBackground(actionModeBackground);