android中dialog弹出软键盘问题

牧夜 2011-06-21 09:12:21
我在activity中show了一个dialog,这个dialog中带有一个输入框,点击输入框后可以输入。
我希望在点击输入框后跳出软键盘,通过软键盘来输入数据,但是却没有弹出软键盘,只能实体键盘输入,
有没有碰到过这个问题,帮帮忙
...全文
24454 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiao888lin 2013-12-25
  • 打赏
  • 举报
回复
引用 17 楼 wengji0302 的回复:
还有一个方法: 在调用show方法前先调用setView(layout),show后再调用window.setContentView(layout),两个Layout布局应该是相同的。 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));
ManagerDialogLayout_是android那个版本的啊,我的怎么没有?
求生小布袋 2013-12-04
  • 打赏
  • 举报
回复
可以阅读官方文档:http://developer.android.com/reference/android/app/Dialog.html 其中有一段: ote: Activities provide a facility to manage the creation, saving and restoring of dialogs. See onCreateDialog(int), onPrepareDialog(int, Dialog), showDialog(int), anddismissDialog(int). If these methods are used, getOwnerActivity() will return the Activity that managed this dialog. Often you will want to have a Dialog display on top of the current input method, because there is no reason for it to accept text. You can do this by setting theWindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM window flag (assuming your Dialog takes input focus, as it the default) with the following code: getWindow().setFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM, WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM); 另外:为了防止弹出输入法时把后面的背景挤变形,可以在Manifest里添加: android:windowSoftInputMode="adjustPan|stateHidden" 嘿嘿 我的就是这么解决的!
wengji0302 2013-04-08
  • 打赏
  • 举报
回复
还有一个方法: 在调用show方法前先调用setView(layout),show后再调用window.setContentView(layout),两个Layout布局应该是相同的。 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));
阿西吧2333 2013-01-22
  • 打赏
  • 举报
回复
还是#14说的一语中的,就把继承自AlertDialog改成继承自Dialog就Ok了,解决问题就要这样简单明了,顶一个!
zhutongze 2012-03-18
  • 打赏
  • 举报
回复
我去google了,google说非常有可能是因为EditText的XML中加了一个<requestFocus />,去掉的话,就可以用类似第一个回复的方法,在setOnFocusChangeListener里面写了,至少我是这样的,
ffshow2006 2011-12-30
  • 打赏
  • 举报
回复
正好遇到这个问题,搜到这个贴的。我也是自定义一个Dialog继承自AlertDialog,没有办法弹出软键盘,只改了一个地方,继承自dialog,软键盘就出来了。我猜是AlertDialog源码中本身有代码禁用了软键盘,因为AlertDialog本身是没有输入框的,android本意就是让我们自定义对话框的时候要继承自Dialog。
edwar12345r 2011-11-25
  • 打赏
  • 举报
回复
补上:

1 也不需要自定义一个继承Dialog的子类。。 直接使用系统Dialog就行。。。
2 也不需要自定义啥主题, 默认主题就可以。。。。。。。。。。。。。。。。

=========================== 结帖 ============================
edwar12345r 2011-11-25
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 yeliang0616 的回复:]
引用 9 楼 xyxdasnjss 的回复:

楼主,怎么实现的? 没看懂 呀, 请教


自定义dialog,继承自Dialog类(而非alertdialog),重写带有主题的构造方法,然后你想生成dialog的时候,用该构造方法构造一个dialog即可。
主题的代码在8楼贴出。
[/Quote]

我的测试与理解:

大家谈的是 AlertDialog, 这里楼主的解决办法是 抛弃 AlertDialog这层, 直接继承Dialog...

经过我的测试, 确实OK。。。 其实,不用楼主提供的主题, 直接用 Dialog 默认主题, 软键盘也能正常 弹出。。 测试代码如下:
LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
mLayout = (LinearLayout) inflater.inflate(R.layout.alert_add_new_member, null);

Dialog mDialog = new Dialog(CustomAlertDialog.this);
mDialog.addContentView(mLayout, new LinearLayout.LayoutParams(-2,-2));
mDialog.show();

所以,与楼主使用什么主题 无关。。。

不过楼主的主题 与 默认的主题的区别 在:
<item name="android:windowNoTitle">true</item>
默认的主题是没有上面这个的,楼主加了这个。。

默认的主题由于没有这个属性,导致弹出的输入法与对话框有部分重叠,很难看。
加上这个属性, 弹出的输入法与对话框不会出现重叠,一上一下,错落有致。。体验上很舒服。。

所以,建议大家自定义dialog的时候, 最好加上 <item name="android:windowNoTitle">true</item>





牧夜 2011-08-23
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 xyxdasnjss 的回复:]

楼主,怎么实现的? 没看懂 呀, 请教
[/Quote]

自定义dialog,继承自Dialog类(而非alertdialog),重写带有主题的构造方法,然后你想生成dialog的时候,用该构造方法构造一个dialog即可。
主题的代码在8楼贴出。
tao_zi7890 2011-08-08
  • 打赏
  • 举报
回复
没看清楚是怎么样解决的问题
xyxdasnjss 2011-08-08
  • 打赏
  • 举报
回复
楼主,怎么实现的? 没看懂 呀, 请教
牧夜 2011-06-23
  • 打赏
  • 举报
回复
最后,解决了问题
做法是:布局依然没变,整个dialog上的布局都由layout来加载
自定义类是继承自dialog的,重写带int的构造函数,这个参数是用来加载dialog的主题的
然后在string.xml中定义主题
代码如下:
<style name="dialog" parent="@android:style/Theme.Dialog">
<item name="android:windowFrame">@null</item><!--边框 -->
<item name="android:windowIsFloating">true</item><!--是否浮现在activity之上 -->
<item name="android:windowIsTranslucent">false</item><!--半透明 -->
<item name="android:windowNoTitle">true</item>
<item name="android:background">@android:color/black</item>
<item name="android:windowBackground">@null</item>
<item name="android:backgroundDimEnabled">false</item><!--模糊 -->
</style>

牧夜 2011-06-23
  • 打赏
  • 举报
回复
这里自己做了件事 ,不知道算不算是错误
开始我的做法是,定义一个dialog,继承自alertdialog,然后里面全部的布局都是自己写的,按钮采用的也是imagebutton,而不像自带的只能在上面显示文字(要求的,没办法),这种情况下怎么弹不出软键盘。
而一般自定义dialog都是继承自dialog类的,然后这里我们可以操作的布局只有中间那一块,在这里我放一个editview,就可以弹出软键盘,现在着手去修改按钮布局吧,哎。。。
另外碰到个问题,和大家分享下,在popupwindow中设置editview的时候,也是无法弹出软键盘的,但可以通过requestfoucs的函数得到焦点即可。
牧夜 2011-06-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 spwwzh 的回复:]

调用你dialog包含的view的 requestFocus()方法
[/Quote]
这个没效果
spwwzh 2011-06-21
  • 打赏
  • 举报
回复
调用你dialog包含的view的 requestFocus()方法
牧夜 2011-06-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sunbo_java 的回复:]

没有做过这种效果,但是我可以大概提供一个思路:
首先你要在点击输入框后弹出软键盘,那么,你就必须得先为你的输入框注册一个点击事件监听器:OnClickListener
其次,在监听器内实现你想完成的工作,网上有很多类似的例子,像楼主推荐一个:
http://aijiawang-126-com.iteye.com/blog/662088

希望对你有帮助
[/Quote]
按照这个方法试了,在执行弹出软键盘之后调用im.isActive()判断软键盘是否有效,得到的值是false,横屏竖屏下结果一样。
booooo­ 2011-06-21
  • 打赏
  • 举报
回复
没有做过这种效果,但是我可以大概提供一个思路:
首先你要在点击输入框后弹出软键盘,那么,你就必须得先为你的输入框注册一个点击事件监听器:OnClickListener
其次,在监听器内实现你想完成的工作,网上有很多类似的例子,像楼主推荐一个:
http://aijiawang-126-com.iteye.com/blog/662088

希望对你有帮助
牧夜 2011-06-21
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jayqean 的回复:]

可以控制你的软件盘的显示
Java code

if(hasFocus){
((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE)).showSoftInput(view, 0);
}
[/Quote]

恩 理论上可行的 和二楼的思路一样的 但是软键盘不出来,让我很是纠结 = =
jayqean 2011-06-21
  • 打赏
  • 举报
回复
可以控制你的软件盘的显示

if(hasFocus){
((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE)).showSoftInput(view, 0);
}

80,362

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧