最近在用到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无法弹出键盘相关推荐

  1. Android学习笔记---09_深入了解各种布局技术

    Android学习笔记---09_深入了解各种布局技术 09_深入了解各种布局技术

  2. Android中EditText优先弹出数字输入法

    Android Android中EditText优先弹出数字输入法 项目中一个EditText输入数字的频率较高,但是汉字和英文的输入也偶有需要,直接在xml文件将inputType设置为number ...

  3. Android之打开继承DialogFragment对话框里面EditText获取光标并且弹出键盘把底部布局顶上去

    1 需求 打开继承DialogFragment对话框里面EditText获取光标并且弹出键盘把底部布局顶上去 2 效果爆照如下 打开这个DialogFragment 3 关键代码实现 override ...

  4. 弹出键盘布局上移_评测 | 别买了HHKB键盘不知道这些新功能!

    ⇪ 点击"蓝字"关注我们 ⇪  关于HHKB静电容键盘的新品系列,小U已经与大家分享了不少"评测",虽然距离新品发布已经有一段时间,但大家的热情依旧不减呀,每一 ...

  5. android 盒子输入法不弹出来,Android EditText不弹出输入法焦点问题的总结

    看一个manifest中Activity的配置,如果这个页面有EditText,并且我们想要进入这个页面的时候默认弹出输入法,可以这样设置这个属性:android:windowSoftInputMod ...

  6. android 仿微信demo————微信顶部操作栏加号按钮实现(弹出子菜单)

    android 仿微信demo----微信启动界面实现 android 仿微信demo----注册功能实现(移动端) android 仿微信demo----注册功能实现(服务端) android 仿微 ...

  7. Android EditText不弹出输入法焦点问题的总结

    同样的代码,碰到有EditText控件的界面时有的机子会弹出输入法,有的机子不会弹出.不好意思,这问题我也一头雾水,谁知道可以告诉我,否则我就把这个问题留下来,以后研究android 源码时再搞个清楚 ...

  8. Android EditText优先弹出数字输入法

    Android中EditText优先弹出数字输入法 当一个EditText使用数字的频率很高,比如用来输入手机号等等,但是有时候可能也需要使用到输入英文和汉字的需求.这个时候,我们默认当EditTex ...

  9. Android使EditText和SearchView取消默认焦点,获取焦点弹出键盘

    默认焦点行为将被父布局截断,以达到取消EditText默认焦点的目的 android:focusable="true"android:focusableInTouchMode=&q ...

最新文章

  1. SAP SD销售收入科目确定VKOA
  2. linux如何使用uboot的命令,Uboot常用命令使用
  3. java 注解scheduler_使用spring的@Scheduled注解执行定时任务,启动项目不输出警告
  4. Linus Torvalds 不担心微软将控制 Linux
  5. magento2 常用代码
  6. 计算机桌面锁定了没设密码怎么解锁,电脑桌面锁屏怎么设置,电脑怎么给手机解锁...
  7. android模拟鼠标点击事件给控件,Android使用模拟鼠标拖动操作
  8. dos系统功能调用的屏幕显示字符是( )号调用_linux混杂设备驱动模型分析(字符设备驱动模型使用篇)...
  9. 坤坤音效键盘(Python实现)
  10. Entity Framework基础
  11. 2021年中国油菜籽发展现状及进出口状况分析:加拿大仍为我国进口油菜籽主要来源国 [图]
  12. 店宝宝:巨头PK精品电商
  13. 拉基米德米表系统源码含简易后台
  14. 文献查询、导出手册(包括 Web of Science, Endnote,EI handbook)
  15. android背光系统,Android 的背光控制
  16. Dynamics 365 CRM证书更换
  17. KubeSphere——常用应用UI可视化部署实战(1)
  18. Relative Uncertainty Learning for Facial Expression Recognition
  19. SAP ABAP QA11屏幕增强 BADI QEVA_SUBSCREEN_1101
  20. 如何破解4399上的小游戏

热门文章

  1. j2ee核心模式_Operator和Sidecar正在成为软件交付新模式
  2. excel删除空行_Excel里99.9%的人都踩过的坑,早看早避开!
  3. 我的SourceInsight配置(附图)
  4. 对二维数组进行Zig-Zag扫描(C++)
  5. char[]:strlen和sizeof的区别
  6. 实现分页的通用存储过程
  7. React开发(260):react项目理解 dva中 console
  8. 前端学习(3288):react hook state-hook
  9. [css] 你知道CSS中的字母“C“代表什么吗?
  10. 工作234:按钮禁用