Android学习问题:关于AlertDialog中自定义布局带有的EditText无法弹出键盘
最近在用到AlertDialog的时候,自定义了其布局文件,其中带有EditText,但是发现在手机上使用的时候,点击EditText却没有弹出键盘,在网上搜索了下,看到有好几种解决方法,试过其中一些方法,有些有效果,有些却是没有效果,在这里小小总结下;
1.第一种是在AndroidManifest.xml中,把此Activity的属性,加个android:windowSoftInputMode=”stateVisible|adjustResize”。
这个方法有试过,但是效果是一进入这个Activity就弹出键盘,而在弹出我所需要的dialog时,点击EditText是依然没有弹出键盘的;
2.加入下面这段代码,这是我最终采取的一个解决方法:
alertDialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
这是参考了关于AlertDialog.getWindow().setContentView(view)不能弹出输入法
3.另外,对于是自定义了AlertDialog 的,还有一种解决方法是继承Dialog类,而不是AlertDialog,不过由于我只是自定义布局,并不是自定义AlertDialog控件,所以这个方法并没有亲自试过.
如果是自定义Dialog的,还有一个参考方法如下:
参考自 android中自定义的dialog中的EditText无法弹出输入法解决方案
1.解决无法弹出输入法:
在show()方法调用之前,用dialog.setView(new EditText(context))添加一个空的EditText,由于是自定义的AlertDialog,有我们指定的布局,所以设置这个不会影响我们的功能,这样就可以弹出输入法了……
2.可以弹出输入法了,但了为了增强用户体验性,当dialog中含有editText时应该,在显示dialog的同时自动弹出键盘:
(1) 可以在自定义的dialog中增加如下方法:
public void showKeyboard() { if(editText!=null){ //设置可获得焦点 editText.setFocusable(true); editText.setFocusableInTouchMode(true); //请求获得焦点 editText.requestFocus(); //调用系统输入法 InputMethodManager inputManager = (InputMethodManager) editText .getContext().getSystemService(Context.INPUT_METHOD_SERVICE); inputManager.showSoftInput(editText, 0); } }
其中editText为自定义dialog中的输入框的view
(2) 在dialog.show()后,调用这个方法显示输入法,由于在调用时可能dialog界面还未加载完成,editText 可能还为空,所以需要加上一个延时任务,延迟显示:
dialog.show();
Timer timer = new Timer();
timer.schedule(new TimerTask() { @Override public void run() { dialog.showKeyboard(); }
}, 200);
在这篇Android开发 解决AlertDialog中的EditText无法调出输入法的问题中,也给出了两个解决方法:
在AlertDialog中使用自定义的View,如果View中有EditText,在上面点击,默认是跳不出软键盘的,不是焦点的问题。
解决方法,有两种,一是把AlertDialog换成Dialog,但这么一来,对话框的最外层会多出一个框,顶部还会空几十个DP,当然可以用setBackgroundDrawable(new ColorDrawable(0))把背景设为透明,隐藏掉边框,但是上面空着的几十个DP还在,对话框就不是在屏幕居中了。
代码:
Dialog ad = new Dialog(context);
ad.show();
Window window = ad.getWindow();
window.setBackgroundDrawable(new ColorDrawable(0));
window.setContentView(R.layout.cancel_sos_dialog);
其解决方法是采用自定义的style:
<style name="CustomDialogStyle" parent="@android:style/Theme.Dialog"><item name="android:windowFrame">@null</item><item name="android:windowIsFloating">true</item><item name="android:windowIsTranslucent">true</item><item name="android:windowNoTitle">true</item><item name="android:background">@android:color/transparent</item><item name="android:windowBackground">@android:color/transparent</item><item name="android:backgroundDimEnabled">true</item><item name="android:backgroundDimAmount">0.6</item></style>
Dialog ad = new Dialog(context,R.style.CustomDialogStyle);
最好的办法是第二种:
AlertDialog ad = new AlertDialog.Builder(context).create();
ad.setView(ManagerDialogLayout_.build(context,ad));
ad.show();
Window window = ad.getWindow();
window.setContentView(ManagerDialogLayout_.build(context,ad));
在调用show方法前先调用setView(layout),show后再调用window.setContentView(layout),两个Layout布局应该是相同的。
至于原因,暂时不明,有待解决。
Android学习问题:关于AlertDialog中自定义布局带有的EditText无法弹出键盘相关推荐
- Android学习笔记---09_深入了解各种布局技术
Android学习笔记---09_深入了解各种布局技术 09_深入了解各种布局技术
- Android中EditText优先弹出数字输入法
Android Android中EditText优先弹出数字输入法 项目中一个EditText输入数字的频率较高,但是汉字和英文的输入也偶有需要,直接在xml文件将inputType设置为number ...
- Android之打开继承DialogFragment对话框里面EditText获取光标并且弹出键盘把底部布局顶上去
1 需求 打开继承DialogFragment对话框里面EditText获取光标并且弹出键盘把底部布局顶上去 2 效果爆照如下 打开这个DialogFragment 3 关键代码实现 override ...
- 弹出键盘布局上移_评测 | 别买了HHKB键盘不知道这些新功能!
⇪ 点击"蓝字"关注我们 ⇪ 关于HHKB静电容键盘的新品系列,小U已经与大家分享了不少"评测",虽然距离新品发布已经有一段时间,但大家的热情依旧不减呀,每一 ...
- android 盒子输入法不弹出来,Android EditText不弹出输入法焦点问题的总结
看一个manifest中Activity的配置,如果这个页面有EditText,并且我们想要进入这个页面的时候默认弹出输入法,可以这样设置这个属性:android:windowSoftInputMod ...
- android 仿微信demo————微信顶部操作栏加号按钮实现(弹出子菜单)
android 仿微信demo----微信启动界面实现 android 仿微信demo----注册功能实现(移动端) android 仿微信demo----注册功能实现(服务端) android 仿微 ...
- Android EditText不弹出输入法焦点问题的总结
同样的代码,碰到有EditText控件的界面时有的机子会弹出输入法,有的机子不会弹出.不好意思,这问题我也一头雾水,谁知道可以告诉我,否则我就把这个问题留下来,以后研究android 源码时再搞个清楚 ...
- Android EditText优先弹出数字输入法
Android中EditText优先弹出数字输入法 当一个EditText使用数字的频率很高,比如用来输入手机号等等,但是有时候可能也需要使用到输入英文和汉字的需求.这个时候,我们默认当EditTex ...
- Android使EditText和SearchView取消默认焦点,获取焦点弹出键盘
默认焦点行为将被父布局截断,以达到取消EditText默认焦点的目的 android:focusable="true"android:focusableInTouchMode=&q ...
最新文章
- SAP SD销售收入科目确定VKOA
- linux如何使用uboot的命令,Uboot常用命令使用
- java 注解scheduler_使用spring的@Scheduled注解执行定时任务,启动项目不输出警告
- Linus Torvalds 不担心微软将控制 Linux
- magento2 常用代码
- 计算机桌面锁定了没设密码怎么解锁,电脑桌面锁屏怎么设置,电脑怎么给手机解锁...
- android模拟鼠标点击事件给控件,Android使用模拟鼠标拖动操作
- dos系统功能调用的屏幕显示字符是( )号调用_linux混杂设备驱动模型分析(字符设备驱动模型使用篇)...
- 坤坤音效键盘(Python实现)
- Entity Framework基础
- 2021年中国油菜籽发展现状及进出口状况分析:加拿大仍为我国进口油菜籽主要来源国 [图]
- 店宝宝:巨头PK精品电商
- 拉基米德米表系统源码含简易后台
- 文献查询、导出手册(包括 Web of Science, Endnote,EI handbook)
- android背光系统,Android 的背光控制
- Dynamics 365 CRM证书更换
- KubeSphere——常用应用UI可视化部署实战(1)
- Relative Uncertainty Learning for Facial Expression Recognition
- SAP ABAP QA11屏幕增强 BADI QEVA_SUBSCREEN_1101
- 如何破解4399上的小游戏
热门文章
- j2ee核心模式_Operator和Sidecar正在成为软件交付新模式
- excel删除空行_Excel里99.9%的人都踩过的坑,早看早避开!
- 我的SourceInsight配置(附图)
- 对二维数组进行Zig-Zag扫描(C++)
- char[]:strlen和sizeof的区别
- 实现分页的通用存储过程
- React开发(260):react项目理解 dva中 console
- 前端学习(3288):react hook state-hook
- [css] 你知道CSS中的字母“C“代表什么吗?
- 工作234:按钮禁用