本文主要是介绍dialog弹窗显示不全,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
弹框显示不全,编辑框不可见
打开可编辑的dialog对话框后,编辑view获取到焦点弹出软键盘输入时,由于屏幕分辨率和屏幕高度问题,导致软键盘高度太高向上挤压dialog对话框,当dialog对话框被向上挤压到状态栏位置时,dialog对话框的高度会自动减小,最终会遮挡住dialog对话框中的部分控件造成显示不全的问题,出现这种现象时,对话框中的可编辑控件的根布局使用一个scrollview控件包裹了子view,比如EditText,并且控件的高度设置成了包裹内容,dialog对话框高度降低,会使scrollveiw的高度降低,挤压了可显示区域的大小
出现这种情况时,dialog对话框与软键盘没有发生重叠覆盖的情况,这也是dialog对话框高度降低的原因之一,解决办法如下
软键盘弹出导致导致dialog对话框显示不全,可以修改软键盘的输入模式,使软键盘与dialog对话框重叠,防止软键盘挤压dialog弹框的可视空间
方法一,修改manifest.xml文件配置
<!--在Manifest.xml文件中给要弹出dialog的Activity配置软键盘输入模式-->
<activityandroid: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() {@Overridepublic void onGlobalLayout() {//自定义的可编辑dialogValidatedEditTextPreference editText = (ValidatedEditTextPreference)getPreferenceScreen().findPreference("device_name");if (editText != null) {//获取dialogAlertDialog dialog = (AlertDialog) editText.getDialog();if (dialog != null) //设置dialog窗口软键盘的输入模式dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);}}}
});
这篇关于dialog弹窗显示不全的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!