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

先说解决方案:


@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);

希望能对大家有所帮助

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值