Android AlertDialog软键盘弹出时EditText隐藏问题求助(适配Android 10)
Android 10下AlertDialog EditText被软键盘遮挡的解决方案
方案一:显式设置Dialog窗口的软键盘模式与布局
Android 10中AlertDialog的默认窗口配置可能未正确响应软键盘的resize事件,需单独给Dialog的Window设置软键盘模式,并调整布局宽度:
final EditText input = new EditText(view.getContext()); input.setHint("请输入密码"); input.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); AlertDialog dialog = new AlertDialog.Builder(view.getContext()) .setTitle("登录验证") .setMessage("请输入登录密码以继续") .setView(input) .setPositiveButton("确认", (dialogInterface, i) -> { // 处理密码输入逻辑 String password = input.getText().toString().trim(); // ... }) .setNegativeButton("取消", null) .create(); // 关键配置:让窗口随软键盘调整大小,并默认弹出软键盘 dialog.getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE | WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE ); // 设置Dialog宽度为屏幕宽度,确保输入框有足够显示空间 dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); dialog.show();
方案二:用ScrollView包裹EditText
如果窗口调整仍无法解决,可将EditText放入ScrollView,让用户能滚动查看输入框:
final EditText input = new EditText(view.getContext()); input.setHint("请输入密码"); input.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); // 创建滚动容器包裹EditText ScrollView scrollContainer = new ScrollView(view.getContext()); scrollContainer.addView(input); scrollContainer.setLayoutParams(new ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT )); AlertDialog dialog = new AlertDialog.Builder(view.getContext()) .setTitle("登录验证") .setMessage("请输入登录密码") .setView(scrollContainer) .setPositiveButton("确认", null) .setNegativeButton("取消", null) .create(); dialog.getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE | WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE ); dialog.show();
方案三:调整Dialog窗口的平移属性
若resize模式无效,可改用平移模式让窗口随软键盘上移:
final EditText input = new EditText(view.getContext()); // ... 初始化EditText AlertDialog dialog = new AlertDialog.Builder(view.getContext()) .setTitle("登录验证") .setMessage("请输入登录密码") .setView(input) .setPositiveButton("确认", null) .setNegativeButton("取消", null) .create(); dialog.show(); Window window = dialog.getWindow(); if (window != null) { WindowManager.LayoutParams params = window.getAttributes(); // 设置窗口随软键盘上移 params.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN; // 可选:手动调整窗口底部边距,留出更多空间 params.bottomMargin = dpToPx(view.getContext(), 80); window.setAttributes(params); } // 辅助方法:dp转像素 private int dpToPx(Context context, int dp) { return (int) (dp * context.getResources().getDisplayMetrics().density); }
注意:Activity的
windowSoftInputMode设置对AlertDialog这类独立窗口无效,必须单独给Dialog的Window配置软键盘参数。
内容的提问来源于stack exchange,提问作者Smarty Coder
相关产品推荐
相关产品推荐

