android自动退出对话框,Android开发 在用EditText对话框Dialog退出后实现输入盘的退出...

前言

在使用继承的Dialog的方式实现自定义Dialog,如果这个Dialog我们还添加了EditText就会发现一个问题。在输入盘显示后,Dialog退出输入盘不会退出。网上有一些奇怪的解决办法,最奇怪的是去根据Touch事件判断Touch坐标来确定是否点击了空白在隐藏输入盘,绕了一个大圈来实现,根本就没仔细阅读过Dialog的代码。其实实现退出Dialog的时候隐藏输入法很简单,只要重写Dialog的dismiss()方法即可,为什么写这篇博客是因为不想大家被错误的实现方式而误导。所以,这里会啰嗦下问题根结。

了解Dialog的退出方式

在了解隐藏输入盘之前,需要排列一下Dialog的退出的3种方式:

1.自定义退出按键,点击后实现dialog.dismiss(); 退出对话框

2.按back键,退出对话框

3.点击Dialog外面的空白背景,退出对话框

错误的隐藏输入盘的方式

@Overridepublic voidonClickLeft(EditDialog dialog) {

dialog.dismiss();

InputMethodManager imm=(InputMethodManager) dialog.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);

imm.hideSoftInputFromWindow(dialog.getEditContent().getWindowToken(), InputMethodManager.RESULT_UNCHANGED_SHOWN);

}

说说为什么这种方式有问题,其实是因为你调用了dialog.dismiss(); 后在获取dialog.getEditContent().getWindowToken() 这个token的时候,必定会返回为null。 因为你的Dialog已经退出了。这个EditText已经被Window解除关系。所以我们需要在dimiss方法之前隐藏输入盘。

容易被误导难点在哪里?

看了上面的错误例子,我们肯定会在隐藏输入法后在调用dismiss(); 好像问题已经解决了? 并没有,因为你只解决了第一种情况 ”自定义退出按键,点击后实现dialog.dismiss(); 退出对话框“ ,还有

”按back键,退出对话框“

”点击Dialog外面的空白背景,退出对话框“

这2个情况的调用是Dialog直接在内部封装调用了dismiss(); 你无法在获取在dismiss之前操作隐藏输入盘。 setOnDismissListener();方法 与 setOnCancelListener();方法 都是执行完dismiss();方法后调用的。这里下面的源码中看到

按外部空白退出的方式

/*** Called when a touch screen event was not handled by any of the views

* under it. This is most useful to process touch events that happen outside

* of your window bounds, where there is no view to receive it.

*

*@paramevent The touch screen event being processed.

*@returnReturn true if you have consumed the event, false if you haven‘t.

* The default implementation will cancel the dialog when a touch

* happens outside of the window bounds.*/

public booleanonTouchEvent(@NonNull MotionEvent event) {if (mCancelable && mShowing &&mWindow.shouldCloseOnTouch(mContext, event)) {

cancel();return true;

}return false;

}

按返回键退出的方式

/*** Called when the dialog has detected the user‘s press of the back

* key. The default implementation simply cancels the dialog (only if

* it is cancelable), but you can override this to do whatever you want.*/

public voidonBackPressed() {if(mCancelable) {

cancel();

}

}

最后都调用了cancel()方法,而cancel方法最后都调用了dismiss方法,但是这些回调都是用Handler发出去的,所以Dialog都已经关闭(并没有被销毁)与window解除了绑定关系了,才会接收到setOnDismissListener();方法 与 setOnCancelListener(); 这2个回调。所以在这2个回调里写隐藏输入盘也是错误的。

正确的方式

重写dismiss方法

@Overridepublic voiddismiss() {

InputMethodManager imm=(InputMethodManager) mEditContent.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);

imm.hideSoftInputFromWindow(mEditContent.getWindowToken(), InputMethodManager.RESULT_UNCHANGED_SHOWN);super.dismiss();

}

End

原文:https://www.cnblogs.com/guanxinjing/p/12980640.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/344916.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【渝粤题库】陕西师范大学200481 高级英语(一)

《高级英语(一)》作业 I. Explain the italicized words in English 1.The very act …was for me a far greater adventure than any trip or any reportorial assignment I’d previously taken. 2.Others were using little red telephones that hung on the facades of gro…

mongodb插入速度每秒_MongoDB事实:商品硬件上每秒插入80000次以上

mongodb插入速度每秒在尝试一些时间序列集合时,我需要一个大型数据集来检查我们的聚合查询在增加数据负载的情况下不会成为瓶颈。 我们解决了5000万份文档,因为超出此数目我们仍然会考虑分片。 每次事件如下所示: {"_id" : Objec…

【渝粤题库】陕西师范大学201691 日语(二) 作业

一、按要求标注: (一)给下列汉字注上假名 1、全部   2、世紀   3、政治    4、文化   5、空港  6、生活   7、本棚   8、工夫    9、意見   10、理科 11、案内  12、相談   13、満足   14、社会  15、都会 …

parallels for linux,在 Parallels Desktop 上安装 Remix OS PC

前言个人觉得呢,像 Remix OS 和 Phoenix OS 这样的国产安卓桌面操作系统还是很划时代的。赋予了安卓平台多任务操作的能力,这可以给二合一设备的体验带来一定的变化,但是不像 Surface 一样后面有巨硬给撑腰可以做大做强起来,但是这…

【渝粤题库】陕西师范大学210014幼儿园科学教育作业(高起专)

《幼儿园科学教育》作业 一、填空题 1.科学教育中常采用的观察方法是 ① 、 ② 、 ③ 。 2.幼儿劳动的种类包括 ① 、 ② 、 ③ 、 ④ 。 3.在幼儿科学教育中,情感的目标非常广泛。《纲要》突出了其中两个方面: ① 、 …

模拟用户输入并检查输出的简单方法

最近,我的一些学生向我询问了赫尔辛基大学MOOC提供的单元测试的机制,我检查了它们的实现,并认为这对于初学者了解实际发生的情况是有帮助的,因此在此发表了这篇小文章。 我们将以“机场”项目为例,这是OOP2第一周的最…

android bench内存测试,华为p10内存测试软件(androbench) v5.0.1 免费版

华为p10内存测试软件(androbench)其实是androbench这款内存测试软件,可以用于测试你的华为p10,是一款不错的华为p10内存测试软件,可以测试你的手机闪存性能,其他的手机也可以免费测试哦。华为p10内存测试软件介绍AndroBench是衡量…

【渝粤题库】陕西师范大学400011 思想政治教育学科教学论 作业(专升本)

《思想政治学科教学论》作业 一、多选择题 在下列选项中至少有一项是符合题目要求的 1、思想政治学科教学论的学科特点包括: A.社会性 B.综合性 C .实践性 D.系统性   E.完整性 2、…

【渝粤题库】陕西师范大学700007 生态学

《生态学》作业 一、名词解释 Meta-种群生态系统次生演替边缘效应初级生产量可持续发展岛屿效应主导因子种群空间分布格局营养级物种多样性生态入侵耐性限度生态位光周期现象趋同适应生态恢复同资源种团原生演替协同进化食物链生态平衡繁殖成效内禀增长率 二、简答题简述丹麦学…

android对话框字体大小,Android Dialog 设置字体大小的具体方法

先看下面图片:这是我在做登录页面的时候,调用系统的progressdialog 进行等待,可是看起来很不协调,左边的等待图片过大,右边文字过小,看起来老别扭,虽然功能上不存在什么问题,但是我有…

国家开放大学2021春1062文学英语赏析题目

教育 教育 试卷代号: 1062 2021年春季学期期末统一考试 文学英语赏析 试题 2021年7月 注意事项 一、将你的学号、姓名及分校(工作站)名称填写在答题纸的规定栏内。考试结束后,把试卷和答题纸放在桌上。试卷和答题纸均不得带出考…

android custom toast,Android自定义Toast

核心代码:package com.huatec.myapplication;import android.content.Context;import android.graphics.Bitmap;import android.support.annotation.ColorInt;import android.support.annotation.DrawableRes;import android.view.Gravity;import android.view.Layo…

【渝粤题库】广东开放大学 大学英语B 形成性考核 (2)

选择题 题目: Do you still get free plastic bags from the supermarkets? Things have changed. China has banned free plastic bags at shops and supermarkets, and people have to pay for using plastic bags. The rule started on June 1. It came becaus…

apache camel_在WildFly中将Apache Camel和Spring添加为jboss模块

apache camel这些天,我在玩Wildfly , Apache Camel和Spring 。 在EAR / WAR之间进行通信的一种简单方法是使用Camel的direct-vm组件。 有或没有骆驼,有很多方法可以实现这一目标。 骆驼在WildFly中就像一个饰物,不需要任何额外的…

国家开放大学2021春1129土木工程力学(本)题目

教育 教育 试卷代号: 1129 2021年春季学期期末统一考试 土木工程力学(本) 试题 2021年7月 一、单项选择题(每小题3分,共30.分。在所列备选项中,选1项正确的或最好的作为答案填入括弧) 1.求图示…

华为android打开usb调试模式,华为 PE-CL00 开启USB调试模式

我们要将华为 PE-CL00与电脑进行连接,就必须要打开华为 PE-CL00系统的调试模式,不同的系统版本打开调试模式的方法有所不同,在这里我们就谈谈华为 PE-CL00各种系统版本打开USB调试模式的方法。1、针对Android 2.1-2.2版本的系统:我…

国家开放大学2021春1044合同法题目

教育 教育 试卷代号: 1044 2021年春季学期期末统一考试 合同法 试题 2021年7月 注意事项 一、将你的学号、姓名及分校(工作站)名称填写在答题纸的规定栏内。考试结束后,把试卷和答题纸放在桌上。试卷和答题纸均不得带出考场。监…

API网关和AWS Lambda进行身份验证

当Foreach最初涉足微服务领域时,我们并没有真正构建微服务。 我们以为我们做到了,但是我们所有的服务中总存在一些逻辑。 当然,每个服务实际上应该只专注于自己的任务,而不应该专注于属于另一个微服务的事物。 我们这方面最明显的…

【渝粤教育】广东开放大学 企业项目报表分析 形成性考核 (35)

题库查询系统 选择题 题目:流动债的流动性分析主要从流动负债的到期日流动负债的推迟可能性两方面进行。 答案: A、正确 题目:营业利润是以主营业务利润为基础加上其他业务利润减去销售费用、管理费用和财务费用,再加上营业外收入减去营业外支…

魅蓝x android 7,魅蓝x2什么时候发布 魅蓝x2发布时间最新消息

日前,魅蓝品牌掌门人李楠或kkk便在微博上放出“bluegate(蓝色大门)”这样一个句子,似乎暗示魅蓝品牌或在近期会有动作,并且由于该条微博的尾巴显示为“下款魅蓝Android”,所以在不少网友看来,或许预示着魅蓝将有新机即…