【问题标题】:Android soft keyboard covers EditText fieldAndroid软键盘覆盖EditText字段
【发布时间】:2021-08-05 15:46:14
【问题描述】:

有没有办法让屏幕滚动以允许看到文本字段?

【问题讨论】:

    标签: android android-edittext softkeys


    【解决方案1】:

    我也有同样的问题。试试下面的代码:

    android:windowSoftInputMode="adjustPan"
    

    将其添加到保存输入的活动的活动标记中的 manifest.xml 中。示例:

    <activity
                android:name=".Activities.InputsActivity"
                ...
                android:windowSoftInputMode="adjustPan"
                />
    

    【讨论】:

    • 最简单的答案!就像注释一样,这需要添加到 Manifest 文件中,并在我们想要的活动下。
    • 就我而言,这至少不会像adjustResize 那样弄乱我的html,但它也涵盖了我的输入字段
    • 这对我没有帮助
    • @vikifor,确保将编辑文本添加到滚动视图中。即使您的布局中只有 3-4 个字段,也可以将所有字段添加到滚动视图中。这使得它在虚拟键盘打开时可以滚动。
    • 工作正常,但每当我触摸 EditText 视图时,键盘都会重绘。
    【解决方案2】:

    您是在问如何控制打开软键盘时可见的内容?您可能想玩windowSoftInputMode。有关更多讨论,请参阅developer docs

    【讨论】:

    • 这很好用,但请确保您的对话框样式中有 true,以防您使用自定义对话框样式。
    • 这似乎在横向模式下不起作用(Nexus 7),可编辑元素隐藏在键盘下。我尝试了 windowSoftInputMode 的不同组合。看来我不能设置 windowIsFloating 因为 ActionBar 不支持它。或者它也可能与我的 EditText 位于列表视图项内的事实有关?
    • 在我的它们中添加 true 后这将不起作用。有人解决这个问题吗?
    • @Max 将android:fitsSystemWindows="true" 添加到您的根视图以解决此问题。
    • 当软键盘可用时,无论whatsapp之类的东西,如何将整个布局拉到键盘上方......
    【解决方案3】:

    我遇到了同样的问题,软键盘位于位于屏幕底部的 EditText 视图之上。我可以通过在我的 AndroidManifest.xml 文件的相关活动中添加一行来找到解决方案。

    android:windowSoftInputMode="adjustResize|stateHidden"
    

    这是整个活动标签的样子:

    <activity
            android:name="com.my.MainActivity"
            android:screenOrientation="portrait"
            android:label="@string/title_activity_main"
            android:windowSoftInputMode="adjustResize|stateHidden" >
        </activity>
    

    这里最重要的值是adjustResize。这会将整个 UI 向上移动,以便为软键盘腾出空间。

    【讨论】:

    • 但是如果你的 css 大部分是百分比值,这可能会弄乱你的 html 的外观
    • 您是在这里猜测还是尝试过?顺便说一句,它不应该弄乱你的 html。我尝试过使用 webviews。它将改变整个视图而不是单个元素。
    • 我试过了。我认为发生这种情况是因为我的 css 主要具有百分比值
    • @DanKodi 我试过adjustResize|stateHiddenadjustPan 没有任何区别。
    【解决方案4】:

    为什么不尝试添加一个 ScrollView 来包装您想要滚动的任何内容。这是我的做法,我实际上在顶部留下了一个不滚动的标题,而当您打开软键盘时,对话框小部件(特别是 EditTexts)会滚动。

    <LinearLayout android:id="@+id/HeaderLayout" >
      <!-- Here add a header or whatever will not be scrolled. -->
    </LinearLayout>
    <ScrollView android:id="@+id/MainForm" >
      <!-- Here add your edittexts or whatever will scroll. -->
    </ScrollView>
    

    我通常会在 ScrollView 中有一个 LinearLayout,但这取决于您。此外,将 Scrollbar 样式设置为 outsideInset 会有所帮助,至少在我的设备上是这样。

    【讨论】:

    • 虽然 Mayra 的回答是每个人应该 做的(可能是 Google 认为每个人都应该做的),但我几乎每次都这样做。这是获得正确显示所需的真正控制的唯一方法。叹息。
    • 不要低估 Scott 的评论。是真的。在我的情况下,我不想调整或平移我的列表视图,但想在该列表的末尾占用 editText。所以,我把 editText 放在了 scrollView 中,它按预期工作。
    【解决方案5】:

    你需要做的就是

    android:isScrollContainer="true"
    

    来源:http://www.davidwparker.com/2011/08/25/android-fixing-window-resize-and-scrolling/

    【讨论】:

    • 虽然答案本身对我没有多大帮助(不需要属性),但链接的源代码包含完整的解释(表单应该嵌入到 ScrollView 中)。谢谢!
    • 同样,页面上没有任何帮助,但链接显示将adjustResize添加到活动windosSoftInputMode并且有效。
    【解决方案6】:

    抱歉恢复旧线程,但没有人提到在您的 EditText 元素中设置 android:imeOptions="flagNoFullscreen"

    【讨论】:

      【解决方案7】:
      android:windowSoftInputMode="adjustPan"
      android:isScrollContainer="true"
      

      适用于 android EditText,但不适用于 webview 或 xwalkview。当软键盘隐藏 webview 或 xwalkview 中的输入时,您使用 android:windowSoftInputMode="adjustResize"

      【讨论】:

        【解决方案8】:

        我相信您可以使用轨迹球使其滚动,最终可能通过选择方法以编程方式实现,但这只是一个想法。我知道轨迹球方法通常有效,但至于执行此操作并使其通过代码工作的确切方法,我不确定。
        希望对您有所帮助。

        【讨论】:

        • 我认为我需要的是一种使窗口“人为”变长以便视图可以滚动的方法。目前,RelativeLayout 设置为 android:layout_width="wrap_content" android:layout_height="wrap_content"
        • 那时我不知道解决方案。也许您可能想手动调整宽度和高度值以满足您的需要,通过将它们进一步拉伸到“wrap_content”正在解析的值。
        【解决方案9】:

        将这一行添加到您的相关活动中,其中键盘覆盖编辑 text.inside onCreat() 活动方法。

        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
        

        【讨论】:

          【解决方案10】:

          添加

          android:gravity="bottom" android:paddingBottom="10dp"

          根据你的edittext大小改变paddingBottom

          【讨论】:

            【解决方案11】:

            我知道这很旧,但上述解决方案都不适合我。经过大量调试,我发现了问题所在。 解决方案是在我的styles.xml 中将android:windowTranslucentStatus 属性设置为false

            【讨论】:

              【解决方案12】:

              如果 EditText 字段被键盘覆盖,请使用以下代码:

                  EditText= findViewById(R.id.edittext)
                  EditText?.getParent()?.requestChildFocus(EditText,EditText)
              

              如果您希望 Cursor 位于 Focused EditText 中,而不是在 EditText?.getParent()?.requestChildFocus(EditText,EditText) 之后使用 EditText.requestFocus(),这有助于在 Focused EditText 中获得焦点和光标。

              【讨论】:

                【解决方案13】:

                上述解决方案完美运行,但如果您使用全屏活动(半透明状态栏),则这些解决方案可能无法正常工作。 因此,对于全屏,请在 Activity 的 onCreate 函数中使用此代码。

                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                        Window w = getWindow();
                        w.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN , WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN );
                        getWindow().setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION, WindowManager.LayoutParams.TYPE_STATUS_BAR);
                    }
                

                例子:

                  protected void onCreate(Bundle savedInstanceState) {
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                        Window w = getWindow();
                        w.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN , WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN );
                        getWindow().setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION, WindowManager.LayoutParams.TYPE_STATUS_BAR);
                    }
                    
                    super.onCreate(savedInstanceState);
                

                【讨论】:

                  【解决方案14】:

                  编辑您的 AndroidManifest.xml

                  android:windowSoftInputMode="adjustResize"
                  

                  将此添加到布局文件的根视图中。

                  android:fitsSystemWindows="true"
                  

                  就是这样。

                  【讨论】:

                    【解决方案15】:

                    我遇到了同样的问题,并搜索了说要添加 adjustPan 的人,而在我的情况下 adjustResize 有效。

                    <activity
                        android:name=".YOUR.ACTIVITY"
                        ...
                        android:windowSoftInputMode="adjustResize"
                    />
                    

                    【讨论】:

                    • 如果发生在我身上,也可能发生在其他任何人身上,只是想提供帮助;)@BabyishTank
                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多