Android中弹出dialog后无法捕捉back键

一、需求

在Android开发过程中,弹出dialog后无法捕捉back键,点击back按键无响应。

二、解决方案

原因:弹出dialog后,activity失去焦点,dialog获得当前焦点。

解决办法:在dialog中可以通过调用setOnKeyListener()方法来为dialog增加按键事件的监听。

private void createDialog() {    AlertDialog.Builder builder = new AlertDialog.Builder(this);    builder.setTitle(getString(R.string.acq_select_hint));

builder.setPositiveButton(getString(R.string.dialog_cancel), (dialog, which) -> onCancelClicked(dialog));

builder.setCancelable(false);

builder.setOnKeyListener((dialog, keyCode, event) -> {        if (keyCode == KeyEvent.KEYCODE_BACK) {            onCancelClicked(dialog);        }        return false;    });    builder.create().show();}
private void onCancelClicked(DialogInterface dialog) {    setResult(100);    finish();    dialog.dismiss();}
时间: 2024-10-06 08:08:14

Android中弹出dialog后无法捕捉back键的相关文章

BroadcastReceiver广播接收者(四)——本地广播LocalBroadcastManager以及在onReceive()中弹出Dialog

MainActivity如下: package cc.cv; import android.os.Bundle; import android.support.v4.content.LocalBroadcastManager; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.app.Activity; import an

Android中弹出对话框,AlertDialog关键代码

写在这里便于以后查看. Android中弹出对话框的关键代码: 1 btn01.setOnClickListener(new OnClickListener() { 2 3 @Override 4 public void onClick(View v) { 5 Toast.makeText(musicActivity.this, "tanchu", 100).show(); 6 //以下是弹出对话框的关键代码, 7 AlertDialog.Builder b = new AlertDi

android在Service,BroadCast onReceiver()中弹出Dialog对话框

写好Alter功能块后,在alter.show()语句前加入: alert.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); 注:alter为AlertDialog类型对象 然后在AndroidManifest.xml中加入权限: <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"></uses-

关于android在Service中弹出Dialog对话框

在创建好AlertDialog类型对象后,要 dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); 同时还要设置权限 <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"></uses-permission> 这样后就可dialog.show()了,要不然容易报错

弹出dialog后不可点击back返回,用广播退出所有activity

dialog的代码是一个登陆状态异常后弹出,让强制重新登录的弹窗: AlertDialog.Builder builder = new AlertDialog.Builder( getActivity(), android.R.style.Theme_Holo_Light_Panel); builder.setMessage("登录异常,请点退出重新登录"); builder.setPositiveButton("退出", new DialogInterface.O

Android中弹出菜单PopupWindow的使用

Android中,使用手指触摸,不能像电脑一样有鼠标左键和右键,所以会有一个PopupWindow来代替鼠标右键.当用户点击的时候出现一个弹出的窗口与用户交流信息.好了,现在就开始介绍PopupWindow的用法. 首先声明一个PopupWindow的对象 PopupWindow  pop=null; 初始化pop pop=new PopupWindow(v,ViewGroup.LayoutParams.FILL_PARENT,ViewGroup.LayoutParams.WRAP_CONTEN

Android 弹出Dialog时隐藏状态栏和底部导航栏

上代码 dialog.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); dialog.getWindow().getDecorView().setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() { @Override public void onSystemUi

IOS中弹出键盘后出现fixed失效现象的解决方案

概述 这个问题常出现在移动web开发中聊天或者留言页面的绝对定位输入框上,页面超过屏幕大小时候输入框focus状态下(键盘弹出)绝对定位的元素失效,导致页面滚动时候把定位元素一并带走,体验十分不好,在此留下一自己的方法,让更多的人不需要再爬这样的小坑. 解决方法 原理很简单,就是定义一个外框把页面包起来,把需要使用fixed定位的元素设置成absolute定位,然后设置外框元素的样式为overflow-y:scroll即可,下面是实例:假设外框元素为.wrap,需要fixed定位的元素为.pos

转载:Android 如何解决dialog弹出时无法捕捉Activity的back事件

在一些情况下,我们需要捕捉back键事件,然后在捕捉到的事件里写入我们需要进行的处理,通常可以采用下面三种办法捕捉到back事件: 1)重写onKeyDown或者onKeyUp方法 2)重写onBackPressed方法 3)重写dispatchKeyEvent方法 这三种办法有什么区别在这里不进行阐述,有兴趣的朋友可以查阅相关资料. 然而在有dialog弹出时,想捕捉back键的事件的话,上述三种办法都无法实现.因为上述方法是重写在activity里面的,也就是说当activity是当前焦点时