Android 以编程方式设置ActionMode后台
我知道可以在XML主题中使用的Android 以编程方式设置ActionMode后台,android,android-actionbar,Android,Android Actionbar,我知道可以在XML主题中使用的android:actionModeBackground 有没有办法在代码中设置此背景 基本上我需要的是 getActionBar().setBackgroundDrawable(drawable); 您可以使用此action\u上下文\u栏获取ActionMode id int amId = getResources().getIdentifier("action_context_bar", "id", "android"); View view=
android:actionModeBackground
有没有办法在代码中设置此背景
基本上我需要的是
getActionBar().setBackgroundDrawable(drawable);
您可以使用此action\u上下文\u栏获取ActionMode id
int amId = getResources().getIdentifier("action_context_bar", "id", "android");
View view= findViewById(amId);
view.setBackground(actionModeBackground);
我在反思的帮助下找到了答案。因为我没有一个actionbar
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实现:StandaloneActionMode和ActionModeImpl。此示例仅适用于第一个示例。对于第二个版本,在Kotlin中使用Android Studio 3.4.2时将与之相同:
(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
,请不要忘记从androidx.appcompat.view.actionMode
导入actionMode
,而不是从android.view.actionMode导入,但这意味着用你不该碰的东西弄脏你的手。此外,对于此类解决方案的前向和/或后向兼容性也没有任何保证。总之,只是一个想法。你可以在这个问题中找到答案:你必须使用反思。奇怪的是,我11个月前提出的问题竟然是“以前问过,现在已经有答案了”,而我想重复的问题只有几天了。检查这个答案