当前位置: 首页 > 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);}
}
http://www.lryc.cn/news/360660.html

相关文章:

  • 【C++】C++入门1.0
  • springboot实现文件上传功能,整合云服务
  • 接口interfance的基本使用
  • Gitlub如何删除分支(删除远程分支+本地分支)
  • 使用RSA算法加密字符串:从基础到实现 - Python
  • MFC实现守护进程,包括开机自启动、进程单例、进程查询、进程等待、重启进程、关闭进程
  • Spark SQL数据源 - Parquet文件
  • eNsp——两台电脑通过一根网线直连通信
  • 杂牌记录仪TS视频流恢复方法
  • 十_信号7-信号集
  • GPT-4o
  • 32位与64位程序下函数调用的异同——计科学习中缺失的内容
  • Python爬虫实战(实战篇)—16获取【百度热搜】数据—写入Ecel(附完整代码)
  • js切割数组的两种方法slice(),splice()
  • 【计算机毕设】基于SpringBoot的医院管理系统设计与实现 - 源码免费(私信领取)
  • 导线防碰撞警示灯:高压线路安全保障
  • 【LeetCode 77. 组合】
  • element-ui组件table去除下方滚动条,实现鼠标左右拖拽移动表格
  • 【C++】list的使用(上)
  • 【代码随想录训练营】【Day 37】【贪心-4】| Leetcode 840, 406, 452
  • concat是什么?前端开发者必须掌握的数组拼接利器
  • WHAT - 容器化系列(一)
  • QT7_视频知识点笔记_67_项目练习(页面以及对话框的切换,自定义数据类型,DB数据库类的自定义及使用)
  • windows10系统64位安装delphiXE11.2完整教程
  • 09.责任链模式
  • Amazon云计算AWS(一)
  • 十_信号4-SIGCHLD信号
  • HCIP的学习(27)
  • 6. MySQL 查询、去重、别名
  • Oracle导出clob字段到csv