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

Android登录页EditText被键盘遮挡问题求助及代码排查

登录页面EditText被键盘遮挡的问题排查与修复方案

问题根源

  1. 窗口标记冲突:你在ActivityLoginNew.java中设置了FLAG_LAYOUT_NO_LIMITS,这个标记会让Activity窗口强制铺满整个屏幕,完全忽略系统状态栏、导航栏以及软键盘的布局调整逻辑,直接导致你在Manifest里设置的adjustResize和adjustPan完全失效。
  2. 布局结构限制:ScrollView的子ConstraintLayout设置了android:layout_height="match_parent",再加上fillViewport="true",会让子布局强制撑满ScrollView,阻碍了内容在软键盘弹出时的滚动适配。

修复步骤

1. 移除冲突的窗口标记

修改ActivityLoginNew.java的onCreate方法,删掉FLAG_LAYOUT_NO_LIMITS的设置,保留沉浸式UI但不破坏布局调整机制:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getWindow().getAttributes().layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
    // 删掉这两行FLAG_LAYOUT_NO_LIMITS的设置
    // getWindow().setFlags(
    //         WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
    //         WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
    // );
    this.getWindow().getDecorView().setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);

    setContentView(R.layout.activity_login_new);
    initViews();
}

2. 调整布局优化滚动适配

修改activity_login_new.xml中ScrollView的子ConstraintLayout高度为wrap_content,让ScrollView能根据内容高度自适应,确保键盘弹出时内容可以正常滚动:

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true"
    android:scrollbars="none">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"> <!-- 从match_parent改为wrap_content -->
        
        <!-- 原有子控件保持不变 -->
        
    </androidx.constraintlayout.widget.ConstraintLayout>

</ScrollView>

3. 修正Manifest配置

确保Manifest中该Activity的windowSoftInputMode只设置一次,避免重复配置覆盖:

<activity
    android:name=".ActivityLoginNew"
    android:windowSoftInputMode="adjustResize|stateHidden"> <!-- 合并设置,stateHidden可选,默认隐藏键盘 -->
</activity>

内容的提问来源于stack exchange,提问作者Kumza Ion

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 00:32:03