如何在 ActionMode 中禁用操作栏后退按钮
How to disable actionbar back button in ActionMode
我使用 ActionMode 来编辑一些内容,右边的那三个按钮可以完成所需的一切,而左边的 back/home/up 按钮就变得多余了。
这是动作模式
private ActionMode.Callback mActionModeCallback = new ActionMode.Callback() {
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(R.menu.editormenu, menu);
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
switch (item.getItemId()) {
case R.id.action_cancel:
selectedView.onCancelEditing();
selectedView.enableEditMode(selectedView,false);
mode.finish();
return true;
case R.id.action_remove:
selectedView.enableEditMode(selectedView,false);
relContainer.removeView(selectedView);
mode.finish();
return true;
case R.id.action_done:
selectedView.enableEditMode(selectedView,false);
mode.finish();
return true;
default:
return false;
}
}
@Override
public void onDestroyActionMode(ActionMode mode) {
mActionMode = null;
}
};
我试图将 back/home/up 按钮用作 "cancel" 按钮,但它的 ID 似乎不是 android.R.id.home 也不是 R.id.home
所以问题是:我如何 remove/disable 这个按钮,或者我如何使用它?
只需调用 dispatchKeyEvent
方法并对其执行操作:
看看下面的例子:
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if(mActionModeIsActive) {
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) {
// handle your back button code here
return true; // consumes the back key event - ActionMode is not finished
}
}
return super.dispatchKeyEvent(event);
}
更多信息:
Prevent to cancel Action Mode by press back button
这个答案对我有用:
remove back/home button from action mode on long press in android
我将这些行添加到我的 styles.xml
<item name="actionModeCloseDrawable">@color/colorAccent</item>
<item name="actionModeCloseButtonStyle">@style/Widget.AppCompat.ActionMode</item>
<item name="actionModeBackground">@color/colorAccent</item>
我正在使用 @color/colorAccent
作为 ActionMode 中 ActionBar 的背景颜色。
我使用 ActionMode 来编辑一些内容,右边的那三个按钮可以完成所需的一切,而左边的 back/home/up 按钮就变得多余了。
这是动作模式
private ActionMode.Callback mActionModeCallback = new ActionMode.Callback() {
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(R.menu.editormenu, menu);
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
switch (item.getItemId()) {
case R.id.action_cancel:
selectedView.onCancelEditing();
selectedView.enableEditMode(selectedView,false);
mode.finish();
return true;
case R.id.action_remove:
selectedView.enableEditMode(selectedView,false);
relContainer.removeView(selectedView);
mode.finish();
return true;
case R.id.action_done:
selectedView.enableEditMode(selectedView,false);
mode.finish();
return true;
default:
return false;
}
}
@Override
public void onDestroyActionMode(ActionMode mode) {
mActionMode = null;
}
};
我试图将 back/home/up 按钮用作 "cancel" 按钮,但它的 ID 似乎不是 android.R.id.home 也不是 R.id.home
所以问题是:我如何 remove/disable 这个按钮,或者我如何使用它?
只需调用 dispatchKeyEvent
方法并对其执行操作:
看看下面的例子:
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if(mActionModeIsActive) {
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) {
// handle your back button code here
return true; // consumes the back key event - ActionMode is not finished
}
}
return super.dispatchKeyEvent(event);
}
更多信息:
Prevent to cancel Action Mode by press back button
这个答案对我有用:
remove back/home button from action mode on long press in android
我将这些行添加到我的 styles.xml
<item name="actionModeCloseDrawable">@color/colorAccent</item>
<item name="actionModeCloseButtonStyle">@style/Widget.AppCompat.ActionMode</item>
<item name="actionModeBackground">@color/colorAccent</item>
我正在使用 @color/colorAccent
作为 ActionMode 中 ActionBar 的背景颜色。