dialog dismiss时键盘不消失的问题。

article/2025/7/9 10:44:40

当setCanceledOnTouchOutside(true),点击阴影处,dialog dismiss时键盘不消失的问题。

如图

一开始觉得很简单,监听下onDimiss()方法,在里面隐藏键盘不就行了。
但是发现大多数手机都不会隐藏(魅族x4会隐藏)。

这是为什么呢?为什么键盘不消失呢?
经过测试,发现edittext.getWindowToken()为null。

   /*** 关闭键盘** @param context* @param et*/public static void hideKeyboard(Context context, EditText et) {InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);LogUtils.showLog("hideKeyboard   imm.isActive() = "+imm.isActive()+"       et.getWindowToken() = "+et.getWindowToken());if (imm.isActive()) {imm.hideSoftInputFromWindow(et.getWindowToken(), 0);}}

这里写图片描述

这是因为当ondismiss 方法执行的时候,dialog已经消失了。已经获取不到windowToken了。

目前发现有两种方式解决这样的问题

1.在ondismiss()方法里面这样隐藏软键盘(有可能没有效果)

 @Overridepublic void onDismiss(DialogInterface dialog) {InputMethodManager inputMgr = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);inputMgr.toggleSoftInput(InputMethodManager.HIDE_NOT_ALWAYS, 0);}

2.在dismiss之前就隐藏软键盘,因为设置setCancelOnTouchOutside(true),会响应Dialog类的onTouch方法。

public boolean onTouchEvent(MotionEvent event) {if (mCancelable && mShowing && mWindow.shouldCloseOnTouch(mContext, event)) {cancel();return true;}return false;}/*** Cancel the dialog.  This is essentially the same as calling {@link #dismiss()}, but it will* also call your {@link DialogInterface.OnCancelListener} (if registered).*/public void cancel() {if (!mCanceled && mCancelMessage != null) {mCanceled = true;// Obtain a new message so this dialog can be re-usedMessage.obtain(mCancelMessage).sendToTarget();}dismiss();}

重写下onTouch()方法就可以了。代码如下

    @Overridepublic boolean onTouchEvent(MotionEvent event) {if (isShowing() && shouldCloseOnTouch(getContext(),event)){ViewHelper.hideKeyboard(context, et_reply_comment);}return super.onTouchEvent(event);}public boolean shouldCloseOnTouch(Context context, MotionEvent event) {if (event.getAction() == MotionEvent.ACTION_DOWN&& isOutOfBounds(context, event) && getWindow().peekDecorView() != null) {return true;}return false;}private boolean isOutOfBounds(Context context, MotionEvent event) {final int x = (int) event.getX();final int y = (int) event.getY();final int slop = ViewConfiguration.get(context).getScaledWindowTouchSlop();final View decorView = getWindow().getDecorView();return (x < -slop) || (y < -slop)|| (x > (decorView.getWidth()+slop))|| (y > (decorView.getHeight()+slop));}// 关闭键盘public static void hideKeyboard(Context context, EditText et) {InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);LogUtils.showLog("hideKeyboard   imm.isActive() = "+imm.isActive()+"       et.getWindowToken() = "+et.getWindowToken());if (imm.isActive()) {imm.hideSoftInputFromWindow(et.getWindowToken(), 0);}}

经测试,以上两种方法都可以关闭软键盘。
另外附在dialog启动时弹出软键盘代码,重写onStart方法

    @Overrideprotected void onStart() {super.onStart();getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);}

http://chatgpt.dhexx.cn/article/8jTrmVGM.shtml

相关文章

pe没法给服务器装系统吗,U盘重装系统无法进入PE解决方法

使用U盘启动盘重装系统&#xff0c;进不去PE怎么办&#xff1f;制作好U盘启动盘&#xff0c;准备装系统的时候&#xff0c;遇到不能进入PE的情况该怎么解决&#xff1f;下面小编整理一篇教程&#xff0c;帮助大家解决这个问题。 首先先分析u盘装系统不能进入pe的原因&#xff1…

真正的黑客键盘

IT程序猿 微博网友评论&#xff1a; 金先生不睡觉&#xff1a;甚至没有退格键&#xff01; O2酱&#xff1a;复读机的键盘&#xff1a;Ctrl&#xff0c;C&#xff0c;V 蓝天草地生活&#xff1a;高手专用&#xff01; 吴彦猪猪_yzy&#xff1a;其实不需要done 某个序列表示don…

LeetCode500. 键盘行

项目场景&#xff1a; 行百里路者半九十 问题描述 键盘行 给你一个字符串数组 words &#xff0c;只返回可以使用在 美式键盘 同一行的字母打印出来的单词。键盘如下图所示。 美式键盘 中&#xff1a; 第一行由字符 “qwertyuiop” 组成。 第二行由字符 “asdfghjkl” 组成…

又一款度盘不限速下载神器,无需登录,10M/s!

开局一张图 这是我最新发现的一款百度云下载工具 简介 有一个网站叫 6盘&#xff0c;这个网站呢&#xff0c;可以转存百度网盘的资源。 然后再将转存的文件下载就可以不限速下载了。 然后&#xff0c;工具的作者觉得 6盘网页版还行&#xff0c;PC版丑拒。 于是&#xff0c;一时…

推荐6款珍藏已久的网盘搜索工具

最近收集了几款好用的网盘资源搜索网站&#xff0c;可能你已经在用了&#xff0c;可能你还不知道它的存在 。如果你已经在用了&#xff0c;说明你很有远光&#xff0c;好的搜索网盘将大大提高我们平时的搜索资源的效率 。 1 胖次搜索 胖次网盘搜索引擎,独家的索引挖掘技术,为您…

深度linux没有硬盘,安装Deepin系统到硬盘分区部分没有发现硬盘数据的解决

使用华为笔记本安装Deepin系统非常的顺利&#xff0c;但是在使用戴尔笔记本安装Deepin的时候却不那么如意&#xff0c;在安装到选择语言后&#xff0c;进展到硬盘分区部分&#xff0c;却没有发现硬盘数据&#xff0c;如下图所示&#xff0c;没有任何的数据&#xff0c;这里就不…

设计模式六大原则

前言&#xff0c;最近参加了面试&#xff0c;问道了设计模式的六大原则&#xff0c;当时一阵尴尬&#xff0c;现在总结一下&#xff0c;设计模式的六大原则如下&#xff1a; 定义&#xff1a;一个软件实体如类、模块和函数应该对扩展开放&#xff0c;对修改关闭 …

服务器查看系统盘位置,服务器上查看硬盘位置

服务器上查看硬盘位置 内容精选 换一换 云硬盘可以做什么?云硬盘(Elastic Volume Service, EVS)可以为云服务器提供高可靠、高性能、规格丰富并且可弹性扩展的块存储服务。成长地图带您由浅入深学习日常使用和维护EVS,包含EVS基础知识,EVS计费方式,EVS的使用方法以及常见问…

鼓励员工离婚,宣布996的有赞还能走多久?

1月27日&#xff0c;移动零售服务商有赞在公司年会上宣布了公司即将执行996工作制的决定&#xff0c;这一决定不仅引起了部分员工的不满&#xff0c;还导致了一些员工呼吁匿名拨打市长热线进行举报。除了实施996工作制度外&#xff0c;有赞公司在年会上还以任正非劝准备离职的高…

有赞,你咄咄逼人的样子很难看

今天看到一则消息&#xff0c;有人爆料&#xff0c;有赞年会中&#xff0c;公司高层公然提出“996”工作制&#xff0c;同时还有一些令人有些毁三观的言论&#xff0c;在这里就不一一列举&#xff0c;大家可以搜索一下&#xff0c;便能知晓。这事在社交平台上迅速传播&#xff…

GitHub又有了新功能:域名控诉互联网公司996行为。一个小时之后,标星就超过了1000

继女装大佬图片分享,割韭菜大佬卖鸡汤之后,GitHub又有了新功能: 控诉互联网公司侵权行为。 原来,是有人注册了一个叫做996.icu的域名,并且在这个网站上大举控诉部分互联网公司实行996工作制的行为。 并且,还点名批评了近期因为员工关系被推上风口浪尖的有赞和京东 作者…

有赞,我们来谈谈尊重和感恩员工

今天被一家公司的奇葩价值观震碎了三观。 1月17日&#xff0c;有赞公司高层在年会上骄傲宣布&#xff1a;同志们&#xff0c;为了进一步挖掘各位的工作潜力&#xff0c;共同开创我们的美好将来&#xff0c;公司将于下周实行996工作制啦&#xff01;为了体现公司对大家的关怀&am…

为什么很多人开始反对996了?

摘要&#xff1a; 反对996是有更深层次的原因的。 也许不少人和我的感觉一样&#xff0c;996这个话题持续的时间有点长了&#xff0c;这挺神奇的。因为&#xff0c;通常一个热点最多持续三四天左右。 而996这个话题&#xff0c;竟然从年初聊到现在&#xff0c;这里不妨梳理一下…

从996说屌丝心态

轻友们大家好~我是珍妮兔&#xff0c;一只工程效率顾问。我的日常生活是在不同的软件研发团队和大家聊天&#xff0c;分享各种轻松把软件做好的最佳实践。如果你有特别想要解决的问题&#xff0c;不妨加我的个人微信&#xff1a;jenny1652告诉我。 从996说屌丝心态 文| 珍妮兔 …

python之父实名反对996

这两天关于996的讨论热度直线上升&#xff1a; 996.ICU域名炮轰“996”工作制 GitHub 996ICU项目不到一天以突破6W star python之父实名反对996 在互联网公司之中&#xff0c;实行“996 工作制”几乎成为默认标配&#xff0c;在去年的年会中&#xff0c;有赞 CEO 白鸦将这种…

歌乎:985博士生对996的困惑

作为一名计算机专业的学生&#xff0c;这几天对996的言论很关注。马云和刘强东两位互联网最有个性的大佬&#xff0c;用重新定义的福报和兄弟&#xff0c;给全国人民喂着鸡汤。 从去年开始互联网的大裁员就愈演愈烈&#xff0c;今年程序员做的996 icu也饱受关注&#xff0c;国际…

996工作制该取消吗?

“996”工作制 每天早9点到岗&#xff0c;一直工作到晚上9点&#xff0c;每周工作6天。 可以在业余时间接app套壳上架的速速加我&#xff0c;长期合作&#xff0c;酬金丰厚&#xff0c;不容错过&#xff01;Q Q 273946117 从2016年起&#xff0c;国内就陆续有互联网公司实行这…

年会宣布996后,那些保持沉默的人

前几天&#xff0c;杭州软件公司有赞在年会上宣布&#xff1a;将实行新的工作制&#xff0c;正常工作时间为早上9点半到晚上9点。周三为家庭日&#xff0c;可以早点走。遇到紧急项目时&#xff0c;一周工作6天&#xff0c;每天工作时间会更长。——也就是996工作制&#xff08;…

有赞基于Flutter的移动端跨平台App架构实践

来源 | 有赞Coder(ID:youzan_coder) 文 | 张玉柱 on 电商移动 一、背景 目前准备试水 Flutter&#xff0c;但是多数 native 开发是不了解 Flutter&#xff0c;因此需要设计一种比较“舒服”的集成方式。 二、混编方案 2.1 方案考量 如果直接采用 Flutter 工程结构来作为日常开发…

GitHub又有了新功能:控诉互联网公司996行为。这个网站被发在GitHub一个小时之后,标星就超过了1000

继女装大佬图片分享&#xff0c;割韭菜大佬卖鸡汤之后&#xff0c;GitHub又有了新功能&#xff1a; 控诉互联网公司侵权行为。 原来&#xff0c;是有人注册了一个叫做996.icu的域名&#xff0c;并且在这个网站上大举控诉部分互联网公司实行996工作制的行为。 并且&#xff0…