You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 15:15:43