Alterdialog中不弹出软键盘原因分析及解决办法
来源:互联网 发布:花园装饰品淘宝网 编辑:程序博客网 时间:2024/06/05 21:01
相信很多人都做过自定义的alterdialog,但不知道有没有发现当alterdialog布局中有exittext的时候即使edittext获得焦点也不能弹出软键盘,是不是很操蛋,而将alterdialog换成dialog的时候就可以的弹出了。下面就去分析一下为什么会这样
看一下alterdialog这个类,点击去就会看到头部注释上有这么一段话
The AlertDialog class takes care of automatically setting * {@link android.view.WindowManager.LayoutParams#FLAG_ALT_FOCUSABLE_IM * android.view.WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM} for you based on whether * any views in the dialog return true from {@link View#onCheckIsTextEditor() * View.onCheckIsTextEditor()}. Generally you want this set for a Dialog * without text editors, so that it will be placed on top of the current * input method UI. You can modify this behavior by forcing the flag to your * desired mode after calling {@link #onCreate}.
什么意思呢,大概的意思就是当alterdialog检测到布局中有view调用onCheckIsTextEditor返回true的时候会自动给窗口设置上WindowManager.LayoutParams#FLAG_ALT_FOCUSABLE_IM这个flag,那么onCheckIsTextEditor是什么意思?看下解释
Check whether the called view is a text editor, in which case it * would make sense to automatically display a soft input window for * it. Subclasses should override this if they implement * {@link #onCreateInputConnection(EditorInfo)} to return true if * a call on that method would return a non-null InputConnection, and * they are really a first-class editor that the user would normally * start typing on when the go into a window containing your view.
啥意思呢,大概也就是说检测是否是文本编辑框,若是的话就返回true,好了那么就知道了当我们的alterdialog布局中有文本编辑框的时候会自动给窗口设置上WindowManager.LayoutParams#FLAG_ALT_FOCUSABLE_IM,那么问题来了这个flag是什么意思,还是看解释吧
Window flag: invert the state of {@link #FLAG_NOT_FOCUSABLE} with * respect to how this window interacts with the current method. That * is, if FLAG_NOT_FOCUSABLE is set and this flag is set, then the * window will behave as if it needs to interact with the input method * and thus be placed behind/away from it; if FLAG_NOT_FOCUSABLE is * not set and this flag is set, then the window will behave as if it * doesn't need to interact with the input method and can be placed * to use more space and cover the input method.
意思好像大概也许差不多就是设置了这个flag就不能在弹出软键盘
那知道了原因怎么解决呢,当然就是把这个flag移除就好了,
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
如果你还想弹出dialog的时候自动弹出软键盘那再加上
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE |WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
好了就这样吧,搬砖去了
阅读全文
0 0
- Alterdialog中不弹出软键盘原因分析及解决办法
- AlterDialog中EditText不弹出键盘
- iOS 模拟器不弹出软键盘的解决办法
- Android基础——EditText不弹出软键盘解决办法
- EditText自动弹出软键盘的原因及解决方法
- 解析android中隐藏与显示软键盘及不自动弹出键盘的实现方法
- 解析android中隐藏与显示软键盘及不自动弹出键盘的实现方法
- 解析android中隐藏与显示软键盘及不自动弹出键盘的实现方法
- 解析android中隐藏与显示软键盘及不自动弹出键盘的实现方法
- 解析android中隐藏与显示软键盘及不自动弹出键盘的实现方法
- 解析android中隐藏与显示软键盘及不自动弹出键盘的实现方法
- 解析android中隐藏与显示软键盘及不自动弹出键盘的实现方法
- 解析android中隐藏与显示软键盘及不自动弹出键盘的实现方法
- 软键盘无法弹出 解决办法
- edittext不弹出软键盘
- Edittext不弹出软键盘
- edittext不弹出软键盘
- EditText不弹出软键盘
- springmvc图片上传、jquery 图片上传预览
- 深度优先搜索练习之神奇的矩环
- 链表倒数的第K个结点
- CSS鼠标指针
- 蓄水池问题
- Alterdialog中不弹出软键盘原因分析及解决办法
- Docker学习总结(27)——Dockerfile详解
- InvalidateRect()、UpdateWindow()、RedrawWindow()区别
- Android 用Animation-list实现逐帧动画
- 廖雪峰《python3 基础教程》读书笔记——第二十一章 Web开发
- 多线程基础
- CGI、Servlet、JSP
- Audio Recording
- 正排索引、倒排索引