dialog弹窗显示不全

弹框显示不全,编辑框不可见

打开可编辑的dialog对话框后,编辑view获取到焦点弹出软键盘输入时,由于屏幕分辨率和屏幕高度问题,导致软键盘高度太高向上挤压dialog对话框,当dialog对话框被向上挤压到状态栏位置时,dialog对话框的高度会自动减小,最终会遮挡住dialog对话框中的部分控件造成显示不全的问题,出现这种现象时,对话框中的可编辑控件的根布局使用一个scrollview控件包裹了子view,比如EditText,并且控件的高度设置成了包裹内容,dialog对话框高度降低,会使scrollveiw的高度降低,挤压了可显示区域的大小

出现这种情况时,dialog对话框与软键盘没有发生重叠覆盖的情况,这也是dialog对话框高度降低的原因之一,解决办法如下

软键盘弹出导致导致dialog对话框显示不全,可以修改软键盘的输入模式,使软键盘与dialog对话框重叠,防止软键盘挤压dialog弹框的可视空间

方法一,修改manifest.xml文件配置

<!--在Manifest.xml文件中给要弹出dialog的Activity配置软键盘输入模式-->
<activity
    android:name=".MainActivity"
    android:exported="true"
    android:windowSoftInputMode="adjustNothing">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

方法二,修改Activity

//在Activity的onCreate函数中,调用setContentView之前添加软件盘输入模式
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);

方法三,从Fragment中弹出Dialog

//在Fragment中点击Button或开关打开可编辑的dialog并弹出软件盘,通过监听根布局的UI变化,监听到dialog view可见时,设置dailog的输入模式
//此方法最好是写到fragment的onResume()函数中,此时所有的View及控件都已初始化完毕
View decorView = getActivity().getWindow().getDecorView();
ViewTreeObserver observer = decorView.getViewTreeObserver();
//监听全局的布局变化
observer.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
    	//自定义的可编辑dialog
        ValidatedEditTextPreference editText = (ValidatedEditTextPreference)getPreferenceScreen().findPreference("device_name");
        if (editText != null) {
        	//获取dialog
            AlertDialog dialog = (AlertDialog) editText.getDialog();
            if (dialog != null) 
            	//设置dialog窗口软键盘的输入模式
                dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);
            }
        }
    }
});
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值