自继承Dilog布局上的EditText不能调用软键盘问题

来源:互联网 发布:象过河软件免费版 编辑:程序博客网 时间:2024/06/05 12:36

先说解决方案:


@Override
public void show() {
super.show();
getWindow().clearFlags(
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
}
解释:
(1)Dialog,Activity依赖于自己的Window
(2)软键盘也相对于是一个Dialog,也依赖于自己的window界面,
(3)其中,系统做了处理,activity的window是可以与dialog公用的,所以activity可以正常弹出键盘,
(4)通过AlertDialog.Builder(Context context, int themeResId).create()创建的dialog,并通过.setView(View view)方式更改布局的方法—默认下是可以与activity公用一个window,可以调用软键盘
(5)但是我们自己继承的Dialog在默认下是没有做任何设置的,由于自己继承的dialog,并不能和activity公用一个window,也不能与同属于dialog的软键盘公用一个,所以默认不能弹出,所以我们需要手动设置给自己的dialog的所在window设置相关的属性,让他允许与软键盘公用一个,记住一定是dialog的Window
(6)关键来了:getWindow()一定要是dialog的,并且在show()之后调用,如何不自定义show()方法,那么就要在使用dialog的地方,使用dialog.getWindow()

getWindow().clearFlags(
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);

希望能对大家有所帮助

阅读全文
0 0
原创粉丝点击