如何在ActionMode中禁用操作栏后退按钮

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在ActionMode中禁用操作栏后退按钮相关的知识,希望对你有一定的参考价值。

我使用ActionMode编辑一些内容,右边的那三个按钮可以完成所需的一切,左边的后面/ home / up按钮变得多余。

这是ActionMode

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按钮作为“取消”按钮,但似乎它的id不是android.R.id.home也不是R.id.home

所以问题是:如何删除/禁用此按钮,或者如何使用它?

答案

只需调用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中禁用操作栏后退按钮的主要内容,如果未能解决你的问题,请参考以下文章

如何覆盖android中的操作栏后退按钮?

如何在带有更多片段的操作栏上添加后退按钮

UITableViewControler 中未设置导航栏标题和未禁用后退按钮

动态禁用导航按钮和标签栏

如何禁用在android片段类中按下的后退按钮

如何使用javascript禁用后退和前进按钮