安卓软键盘遮挡了EditText输入框

174
有没有办法让屏幕滚动,以便能够看到文本字段?
15个回答

178

我也经历过同样的问题。请尝试以下代码:

android:windowSoftInputMode="adjustPan"

将其添加到manifest.xml文件中,放在包含输入的活动标签的活动中。例如:

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

14
最简单的回答!只需注意,这需要添加到清单文件中,并在我们想要的活动下面。 - NRR
6
就我而言,这至少不会像“adjustResize”那样搞乱我的HTML,但它也覆盖了我的输入字段。 - Rahul Dole
13
这并没有帮助到我。 - vikifor
1
@vikifor,请确保将您的EditText添加到ScrollView中。即使您的布局中只有3-4个字段,也请将所有字段添加到ScrollView中。这样当虚拟键盘打开时,它就可以滚动了。 - Kuldeep Sakhiya
太棒了...节省了我很多时间。 - Sabir Syed
显示剩余3条评论

169

2
这个很好用,但是请确保在您的对话框样式中有 <item name="android:windowIsFloating">true</item>,以防您使用自定义对话框样式。 - Dmitry Chistyakov
在我的主题中添加<item name="android:windowTranslucentStatus">true</item>后,这将无法工作。有人能修复吗? - Max
2
@Max 在你的根视图中添加 android:fitsSystemWindows="true" 可以解决这个问题。 - David Passmore
1
软键盘可用时,无论如何都将完整布局拉到键盘上方,就像 WhatsApp 一样。 - Karue Benson Karue
嗨,我有一个包含很多文本的editText,当键盘打开时,内置滚动条无法滚动到底部,请你看一下这个问题好吗? - Chagai Friedlander
显示剩余4条评论

58

我曾经遇到同样的问题,软键盘会遮挡位于屏幕底部的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。它会将整个用户界面向上移动,以给软键盘留出空间。


但是,如果您的CSS主要使用百分比值,则可能会破坏您的HTML外观。 - Rahul Dole
你是在猜测还是尝试了一下?顺便说一下,它不应该破坏你的HTML。我已经用Web视图尝试过了。它将会移动整个视图而不是单个元素。 - DanKodi
1
我尝试了一下。我认为这是因为我的CSS大多数都是百分比值。 - Rahul Dole
@DanKodi 我尝试了 adjustResize|stateHidden,但与 adjustPan 没有任何区别。 - IgorGanapolsky

26

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

<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,但这取决于您。另外,在我的设备上,将滚动条样式设置为outsideInset有所帮助。


4
虽然Mayra的回答是每个人应该做的(也可能是Google认为每个人都应该这样做的),但这几乎是我每次做的事情。这是唯一能够获得所需真正控制以正确显示的方法。唉。 - SMBiggs
不要低估Scott的评论。这是真的。在我的情况下,我不想调整或平移我的listview,而是想占用该列表末尾的editText。因此,我将editText放在scrollView中,它按预期工作。 - Darpan

17

1
虽然答案本身并没有对我有太大帮助(属性不是必需的),但链接的源代码包含了完整的解释(表单应嵌入ScrollView中)。谢谢! - johndodo
同样,页面上的任何内容都没有帮助我,但链接显示将adjustResize添加到activity windosSoftInputMode中,这很有效。 - steven smith

15

很抱歉重新唤起旧线程,但没有人提到在您的EditText元素中设置android:imeOptions="flagNoFullscreen"


8
android:windowSoftInputMode="adjustPan"
android:isScrollContainer="true"

该方法适用于Android EditText,但不适用于webview或xwalkview。当软键盘隐藏输入在webview或xwalkview中时,您需要使用android:windowSoftInputMode =“ adjustResize”


4

我相信使用轨迹球可以使其滚动,这可能通过选择方法在程序上最终实现,但这只是一个想法。我知道轨迹球方法通常有效,但是关于如何确切地做到这一点并从代码中使其工作,我不确定。
希望对你有所帮助。


我认为我需要的是一种方法,可以使窗口“人为地”变长,以便视图可以滚动。目前RelativeLayout的设置为android:layout_width="wrap_content" android:layout_height="wrap_content"。 - Alexis
那我不知道有什么解决方案。也许你可以手动调整宽度和高度的值以适应你的需求,将它们拉伸到“wrap_content”所解析的值更远的地方。 - Luis Miguel Serrano

1
在相应的活动中,为键盘覆盖编辑文本添加这一行代码。在活动的onCreate()方法内部。
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

1

只需添加

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

根据您的EditText尺寸更改paddingBottom


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接