Настройка ActionMode Фоновый программный
Я знаю android:actionModeBackground
, который можно использовать в XML-темах.
Есть ли способ установить этот фон в коде?
В принципе мне нужен эквавалент ActionMode
getActionBar().setBackgroundDrawable(drawable);
Ответы
Ответ 1
Я понял с помощью рефлексии. Потому что у меня нет панели действий
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) {
}
}
Также есть 2 реализации ActionMode: StandaloneActionMode и ActionModeImpl. этот пример только для первого. Для второго он будет таким же
Ответ 2
Вы можете получить идентификатор ActionMode с помощью этой action_context_bar
int amId = getResources().getIdentifier("action_context_bar", "id", "android");
View view= findViewById(amId);
view.setBackground(actionModeBackground);
Ответ 3
В 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
, не забудьте импортировать ActionMode
из androidx.appcompat.view.ActionMode
, а не из android.view.ActionMode
.