当前位置: 首页 > news >正文

Android Dialog软键盘弹出问题完美解决办法

一、问题:

Dialog中有输入框时,显示后无法自动弹起软键盘,原因就不赘述了,自行Google。

一、解决办法:

开启独立线程,线程中使用while循环,循环调用弹起软键盘方法,直至showSoftInput返回true,则终止循环。循环内加入sleep,避免调用次数过多。亲测循环不超过5次,即可成功开启软键盘,效果流畅丝滑。

注意:不要用toggleSoftInput相关方法,那样会使得你的软键盘管理混乱!

public class KeyboardManager {private final String TAG = "KeyboardManager";private static volatile KeyboardManager mKeyboardManager;private InputMethodManager mInputMethodManager;public static synchronized KeyboardManager with() {if (mKeyboardManager == null) {synchronized (KeyboardManager.class) {if (mKeyboardManager == null) {mKeyboardManager = new KeyboardManager();}}}return mKeyboardManager;}private KeyboardManager() {}public InputMethodManager getInputMethodManager() {if (null == mInputMethodManager)mInputMethodManager = (InputMethodManager) ApplicationExt.getInstance().getSystemService(Context.INPUT_METHOD_SERVICE);return mInputMethodManager;}public void show(View mView) {if (getInputMethodManager() == null || null == mView) {return;}mView.requestFocus();getInputMethodManager().showSoftInput(mView, 0);}Thread mThread;public void showDelayed(View mView) {if (getInputMethodManager() == null || null == mView) {return;}mView.requestFocus();mThread = new Thread(new Runnable() {@Overridepublic void run() {while (true) {if (mView.isShown() && mView.isFocused()) {boolean isShow = getInputMethodManager().showSoftInput(mView, 0);Log.i(TAG, "keyboard is show " + isShow);if (isShow)break;else {try {Thread.sleep(20);} catch (InterruptedException e) {throw new RuntimeException(e);}}}Log.i(TAG, "continue show keyboard");}}});mThread.start();}public void hide(View mView) {if (getInputMethodManager() == null || null == mView) {return;}mView.clearFocus();getInputMethodManager().hideSoftInputFromWindow(mView.getWindowToken(), 0);}
}

相关文章:

  • 自然语言处理(NLP)中的迁移学习
  • IEEE Latex模版踩雷避坑指南
  • 每日一题《leetcode--117.填充每个结点的下一个右侧结点指针||》
  • 基于transformers框架实践Bert系列6-完形填空
  • C++进程间通信 消息队列
  • STEP 7-MicroWIN SMART
  • TalkingData数据统计的力量
  • 短信平台-平台群发短信
  • 用户接入和认证技术
  • Sql语法3
  • 【芯片验证方法】
  • 大数据技术分享 | Kylin入门系列:基础介绍篇
  • MindSpore实践图神经网络之环境篇
  • Nacos 2.x 系列【12】配置加密插件
  • 【二叉树】:LeetCode:100.相同的数(分治)
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • css属性的继承、初识值、计算值、当前值、应用值
  • DataBase in Android
  • HTML-表单
  • PHP的Ev教程三(Periodic watcher)
  • python学习笔记 - ThreadLocal
  • Python学习之路13-记分
  • session共享问题解决方案
  • ucore操作系统实验笔记 - 重新理解中断
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 前端之React实战:创建跨平台的项目架构
  • 十年未变!安全,谁之责?(下)
  • 仓管云——企业云erp功能有哪些?
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • #define
  • #FPGA(基础知识)
  • #pragma multi_compile #pragma shader_feature
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • (C语言)共用体union的用法举例
  • (ISPRS,2021)具有遥感知识图谱的鲁棒深度对齐网络用于零样本和广义零样本遥感图像场景分类
  • (二)c52学习之旅-简单了解单片机
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (分类)KNN算法- 参数调优
  • (六)DockerCompose安装与配置
  • (十七)、Mac 安装k8s
  • (十一)c52学习之旅-动态数码管
  • (学习总结)STM32CubeMX HAL库 学习笔记撰写心得
  • (译)计算距离、方位和更多经纬度之间的点
  • (转)甲方乙方——赵民谈找工作
  • (转)我也是一只IT小小鸟
  • (转载)OpenStack Hacker养成指南
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...
  • *算法训练(leetcode)第四十天 | 647. 回文子串、516. 最长回文子序列
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .NET Core 成都线下面基会拉开序幕
  • .NET MVC之AOP