prevent后退按钮而ActionMode活跃 [英] Prevent Back button whilst ActionMode is active

本文介绍了prevent后退按钮而ActionMode活跃的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在下面链接的问题的过程不出现对我也与标准或支持ActionMode工作。 ACTION_UP从不出现作为一个参数虽然ACTION_DOWN不但无论如何,在ActionMode仍取消。

<一个href=\"http://stackoverflow.com/questions/11725729/$p$pvent-to-cancel-action-mode-by-$p$pss-back-button\">$p$pvent由preSS取消操作模式后退按钮

任何人可以建议如何prevent从收盘时的返回键是pressed?操作模式

我的code

 进口android.os.Bundle;
进口android.support.v7.app.AppCompatActivity;
进口android.support.v7.widget.Toolbar;进口android.view.KeyEvent;
进口android.view.Menu;
进口android.view.MenuItem;
进口android.view.View;
进口android.widget.Button;
进口android.widget.Toast;公共类测试扩展AppCompatActivity {工具栏工具栏;
按钮的标准;
按钮的支持;@覆盖
保护无效的onCreate(捆绑savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.test);    工具栏=(栏)findViewById(R.id.toolbar);
    setSupportActionBar(工具栏);    标准=(按钮)findViewById(R.id.standard);
    standard.setOnClickListener(新View.OnClickListener(){
        @覆盖
        公共无效的onClick(视图v){
            startActionMode(standardCallback);
            standard.setVisibility(View.GONE);
            support.setVisibility(View.GONE);
        }
    });    支持=(按钮)findViewById(R.id.support);
    support.setOnClickListener(新View.OnClickListener(){
        @覆盖
        公共无效的onClick(视图v){
            startSupportActionMode(supportCallback);
            standard.setVisibility(View.GONE);
            support.setVisibility(View.GONE);
        }
    });}私人android.view.ActionMode.Callback standardCallback =新android.view.ActionMode.Callback(){
    @覆盖
    公共布尔onCreateActionMode(android.view.ActionMode模式,菜单菜单){
        mode.setTitle(标准动作模式已启用);
        返回true;
    }    @覆盖
    在prepareActionMode公共布尔(android.view.ActionMode模式,菜单菜单){
        返回false;
    }    @覆盖
    公共布尔onActionItemClicked(android.view.ActionMode模式,菜单项项){
        返回false;
    }    @覆盖
    公共无效onDestroyActionMode(android.view.ActionMode模式){
        standard.setVisibility(View.VISIBLE);
        support.setVisibility(View.VISIBLE);
    }
};//要求主题条目:&LT;项目名称=windowActionModeOverlay&GT;真&LT; /项目&GT;
私人android.support.v7.view.ActionMode.Callback supportCallback =新android.support.v7.view.ActionMode.Callback(){
    @覆盖
    公共布尔onCreateActionMode(android.support.v7.view.ActionMode模式,菜单菜单){
        mode.setTitle(支持行动模式已启用);
        返回true;
    }    @覆盖
    在prepareActionMode公共布尔(android.support.v7.view.ActionMode模式,菜单菜单){
        返回false;
    }    @覆盖
    公共布尔onActionItemClicked(android.support.v7.view.ActionMode模式,菜单项项){
        返回false;
    }    @覆盖
    公共无效onDestroyActionMode(android.support.v7.view.ActionMode模式){
        standard.setVisibility(View.VISIBLE);
        support.setVisibility(View.VISIBLE);
    }
};@覆盖
公共布尔dispatchKeyEvent(KeyEvent的事件){
        如果(event.getKey code()== KeyEvent.KEY code_BACK&放大器;&安培; event.getAction()== KeyEvent.ACTION_UP){
            //处理您的后退按钮code在这里
            Toast.makeText(这一点,回到ACTION_UP,Toast.LENGTH_LONG).show();
            返回true; //消耗后面关键事件 - ActionMode没有完成
        }    如果(event.getKey code()== KeyEvent.KEY code_BACK&放大器;&安培; event.getAction()== KeyEvent.ACTION_DOWN){
        //处理您的后退按钮code在这里
        Toast.makeText(这一点,回到ACTION_DOWN,Toast.LENGTH_LONG).show();
        返回true; //消耗后面关键事件 - ActionMode没有完成
    }    返回super.dispatchKeyEvent(事件);
}

}

布局

 &LT;?XML版本=1.0编码=UTF-8&GT?;
&LT; LinearLayout中的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
          机器人:layout_width =match_parent
          机器人:layout_height =match_parent
          机器人:方向=垂直&GT;&LT; android.support.v7.widget.Toolbar
    机器人:ID =@ + ID /工具栏
    机器人:layout_width =match_parent
    机器人:layout_height =WRAP_CONTENT
    机器人:ATTR / colorPrimary背景=
    安卓了minHeight =机器人:ATTR / actionBarSize
    机器人:主题=@风格/ ThemeOverlay.AppCompat.Dark.ActionBar/&GT;&LT;按钮
    机器人:ID =@ + ID /标准
    机器人:layout_width =WRAP_CONTENT
    机器人:layout_height =WRAP_CONTENT
    机器人:layout_margin =30dp
    机器人:文字=标准/&GT;&LT;按钮
    机器人:ID =@ + ID /支持
    机器人:layout_width =WRAP_CONTENT
    机器人:layout_height =WRAP_CONTENT
    机器人:layout_margin =30dp
    机器人:文字=支持/&GT;&LT; / LinearLayout中&GT;


解决方案

我使用工具栏从支持库,来仿真ActionMode条解决了这个。

The procedure in the question linked below does not appear to work for me either with the standard or the support ActionMode. ACTION_UP never appears as a parameter although ACTION_DOWN does but regardless, the ActionMode is still cancelled.

Prevent to cancel Action Mode by press back button

Can anybody suggest how to prevent the action mode from closing when the back key is pressed?

My code

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;

import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class test extends AppCompatActivity  {

Toolbar toolbar;
Button standard;
Button support;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.test);

    toolbar= (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    standard= (Button) findViewById(R.id.standard);
    standard.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startActionMode(standardCallback);
            standard.setVisibility(View.GONE);
            support.setVisibility(View.GONE);
        }
    });

    support= (Button) findViewById(R.id.support);
    support.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startSupportActionMode(supportCallback);
            standard.setVisibility(View.GONE);
            support.setVisibility(View.GONE);
        }
    });

}

private android.view.ActionMode.Callback standardCallback=new android.view.ActionMode.Callback() {
    @Override
    public boolean onCreateActionMode(android.view.ActionMode mode, Menu menu) {
        mode.setTitle("Standard Action Mode Enabled");
        return true;
    }

    @Override
    public boolean onPrepareActionMode(android.view.ActionMode mode, Menu menu) {
        return false;
    }

    @Override
    public boolean onActionItemClicked(android.view.ActionMode mode, MenuItem item) {
        return false;
    }

    @Override
    public void onDestroyActionMode(android.view.ActionMode mode) {
        standard.setVisibility(View.VISIBLE);
        support.setVisibility(View.VISIBLE);
    }
};

//requires theme entry: <item name="windowActionModeOverlay">true</item>
private android.support.v7.view.ActionMode.Callback supportCallback=new android.support.v7.view.ActionMode.Callback() {
    @Override
    public boolean onCreateActionMode(android.support.v7.view.ActionMode mode, Menu menu) {
        mode.setTitle("Support Action Mode Enabled");
        return true;
    }

    @Override
    public boolean onPrepareActionMode(android.support.v7.view.ActionMode mode, Menu menu) {
        return false;
    }

    @Override
    public boolean onActionItemClicked(android.support.v7.view.ActionMode mode, MenuItem item) {
        return false;
    }

    @Override
    public void onDestroyActionMode(android.support.v7.view.ActionMode mode) {
        standard.setVisibility(View.VISIBLE);
        support.setVisibility(View.VISIBLE);
    }
};

@Override
public boolean dispatchKeyEvent(KeyEvent event) {
        if (event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) {
            // handle your back button code here
            Toast.makeText(this,"Back ACTION_UP",Toast.LENGTH_LONG).show();
            return true; // consumes the back key event - ActionMode is not finished
        }

    if (event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
        // handle your back button code here
        Toast.makeText(this,"Back ACTION_DOWN",Toast.LENGTH_LONG).show();
        return true; // consumes the back key event - ActionMode is not finished
    }

    return super.dispatchKeyEvent(event);
}

}

Layout

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:orientation="vertical">

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="?attr/colorPrimary"
    android:minHeight="?android:attr/actionBarSize"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/>

<Button
    android:id="@+id/standard"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="30dp"
    android:text="Standard"/>

<Button
    android:id="@+id/support"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="30dp"
    android:text="Support"/>

</LinearLayout>

解决方案

I solved this by using the Toolbar from the Support Library to emulate an ActionMode bar.

这篇关于prevent后退按钮而ActionMode活跃的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆