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布局应该是相同的。

至于原因,暂时不明,有待解决。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/409157.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

powermockito教程_Mockito与PowerMock的使用基础教程

一、Mockito与PowerMock简述Mockito与PowerMock都是Java流行的一种Mock框架&#xff0c;使用Mock技术能让我们隔离外部依赖以便对我们自己的业务逻辑代码进行单元测试&#xff0c;在编写单元测试时&#xff0c;不需要再进行繁琐的初始化工作&#xff0c;在需要调用某一个接口时…

U8远程接入客户端重新安装问题

系统检测到已经安装了旧版本客户端软件 解决&#xff1a;[-HKEY_LOCAL_MACHINE\SOFTWARE\Comexe Ras Sys]删掉这个就可以了 转载于:https://www.cnblogs.com/martian6125/archive/2013/01/30/9631101.html

Android控件用法总结之EditText

最近毕业设计也快做完了&#xff0c;因为也是边学Android边做毕设&#xff0c;而且也因为是初学&#xff0c;所以用了比较长时间&#xff0c;现在也是希望记下这段时间写Android的一些技巧方法或者是问题。 首先是关于EditText这个控件&#xff0c;这个控件用的也是非常普遍的…

js 循环拆词_javascript forEach通用循环遍历方法

循环遍历一个元素是开发中最常见的需求之一&#xff0c;那么让我们来看一个由框架BASE2和Jquery的结合版本吧.上一次的错误太多&#xff0c;排版也出现了问题&#xff0c;重写了一遍&#xff0c;希望大家支持.循环遍历一个元素是开发中最常见的需求之一&#xff0c;那么让我们来…

解决Tocmat6.x的catalina.out日志不断增加问题

实际的线上环境&#xff0c;如果使用tomcat作为运行容器&#xff0c;需要注意默认的tomcat的日志配置&#xff0c;在线上很容易导致产生大量垃圾log&#xff0c;有可能会导致tomcat不堪重负而down掉&#xff0c; 为了避免产生上述问题&#xff0c;则需要进行配置调整。 修改$TO…

Python 学习笔记(1)

最近开始学习Python&#xff0c;早早听说这是一门高效率的编程语言&#xff0c;据说可以用几行代码就实现如Java语言需要写几十行代码才实现的功能&#xff0c;加上这门语言在图像分类等方向应用得很多&#xff0c;所以就提前学习下。 原本计划是看《Head First Python》的&…

android image设置adjustviewbounds_探索 Android 平台的 CameraX

前言如果你曾经用过 Android 的 Camera APIs&#xff0c;你可能已经感受到了&#xff0c;它们一直没有成为最容易实现的东西。最开始是 Camera API&#xff0c;然后又推荐使用 Camera2 API — 这个升级是为了让开发者在使用 Android 的相机 API 时有更好的体验。然而&#xff0…

一行语句让你的浏览器变成记事本

Jose Jesus Perez Aguinaga : One line browser notepad&#xff0c; 只需要在浏览器地址栏键入&#xff1a; data:text/html, <html contenteditable>转载于:https://www.cnblogs.com/fresky/archive/2013/01/31/2886837.html

c++opencv汉字分割_机器学习小白,还不快pick一下——【视觉与图像:阈值分割】...

“前言&#xff1a;安利Python来开发OpenCV的原因其实细心的小伙伴早在?【视觉与图像】PythonOpenCV教程入门篇就找到了想要的答案。(点蓝字即可打开)”今天周五了&#xff01;今天还不下雨&#xff01;&#xff01;今天又可以更新了&#xff01;&#xff01;&#xff01;先前…

python学习笔记--理解生成器

在学习python的时候&#xff0c;刚开始接触生成器&#xff08;generator&#xff09;这个概念的时候&#xff0c;其实还是不太能理解&#xff0c;感觉并没有完全掌握&#xff0c;今天看到这篇文章的时候&#xff0c;感觉对这个概念真的是有了进一步的了解&#xff0c;感觉生成器…

再不努力我就老了

借用李宇春歌里的一句话&#xff0c;再不疯狂我们就老了。。。再不努力青春就没了。。。 今天在浏览校内时&#xff0c;发现右下角滚动的照片中&#xff0c;竟有一张是关于自己的&#xff0c;那是自己5年前的照片&#xff0c;满脸的稚嫩&#xff0c;连自己都承认那时的自己真的…

mysql主键外键_MySQL主键和外键使用及说明

摘自网上一个经典的例子&#xff1a;大哥和小弟一、外键约束MySQL通过外键约束来保证表与表之间的数据的完整性和准确性。外键的使用条件&#xff1a;1.两个表必须是InnoDB表&#xff0c;MyISAM表暂时不支持外键(据说以后的版本有可能支持&#xff0c;但至少目前不支持)&#x…

python学习笔记--迭代器

转载自理解Python的迭代器 首先&#xff0c;廖雪峰老师的教程中解释了迭代器和生成器&#xff0c;这篇文章只是补充和我个人的总结。 什么是迭代 可以直接作用于for循环的对象统称为可迭代对象(Iterable)。 可以被next()函数调用并不断返回下一个值的对象称为迭代器(Iterat…

【转载】周鸿祎:做产品体验先把自己切换到二傻子模式

我唯一能自吹的地方&#xff0c;就是本人在互联网里可能犯的错最多&#xff0c;挨的骂最多&#xff0c;然后也经历了很多失败&#xff0c;所以这样才有一些真实的感受。 建议大家把《定位》和《创新者的窘境》、《创新者的解答》这几本书放在身边反复读。你经历得越多&#xff…