当软键盘在安卓手机上弹出时,如何将布局向上移动?

89

我在布局中有一个登录界面,其中包含两个EditTexts和一个登录按钮。问题是,当我开始输入时,软键盘弹出并覆盖了登录按钮。当键盘出现时,如何将布局向上或上移?

我不想使用ScrollView,只想在不滚动的情况下实现它。怎么做?

17个回答

62

windowSoftInputMode属性设置为adjustPanadjustResize

<activity android:windowSoftInputMode="adjustPan|adjustResize"> </activity>

36
初始设置不能正常工作,但将其更改为 <activity android:windowSoftInputMode="adjustResize"></activity> 后,它就可以正常工作了。 - nickiaconis
2
请说明您正在使用的Android版本。有些答案在某些版本上可能完全无用。 - Josh
正如 @nickiaconis 所说,我不需要 'adjustPan' 参数,这对我很有效,谢谢。 - danisupr4
只使用 adjustPan 对我很有帮助。像魔法一样有效 :) 非常感谢! - Atul
6
设置必须是以下表格中列出的值之一,或者是一个“state…”值加上一个“adjust…”值的组合。在任何一组中设置多个值(例如多个“state…”值)会导致未定义的结果。 - EmJiHash
显示剩余3条评论

35
尝试将以下内容添加到对应活动的Android清单文件中。
<activity android:windowSoftInputMode="adjustPan"> </activity>

1
我的布局第一次向上移动,但当关闭键盘并再次打开时,不会移动。 - Nabeghe

27
onCreate() 方法中使用此代码:
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

1
谢谢,那很有帮助。不知道为什么,<activity android:windowSoftInputMode="adjustPan"> </activity> 对我没用。 - DH28
2
这个方法对我有用,但是使用SOFT_INPUT_ADJUST_RESIZE而不是ADJUST_PAN。 - Voy

18

只有

android:windowSoftInputMode="adjustResize"

在 Manifest 文件中的您的活动标记将起到作用。


我正在使用ConstraintLayout,但这个解决方案对我不起作用。 - Karan Sharma
在撰写本答案时,ConstraintLayout尚未添加到Android布局中。您可以在此线程中找到适合您的任何其他解决方案。一旦我有时间,我肯定会更新我的答案以包含ConstraintLayout。感谢您的反馈。 - Bhargav Thanki

13
将此行放置在 manifest.xml 中的活动声明时间。
<android:windowSoftInputMode="adjustPan">

10
android:fitsSystemWindows="true"

在布局文件的主要布局上添加属性

android:windowSoftInputMode="adjustResize"

在您的 Manifest.xml 文件中的 Activity 中添加一行代码

对我来说完美运作。


fitsSystemWindows与键盘无关。 - Tim
@TimCastelijns,在我的情况下(全屏活动),这很重要。如果设置为“false”,视图将不会上移。 - CoolMind

10

我通过了解设备上软键盘的状态来实现这一点。当键盘显示时,我将布局移动到y轴位置,并在不显示时将其移回原始位置。这很有效,遵循这些指南。


2
我能够在键盘显示时将布局向上移动,但是当键盘隐藏时无法将其移回原始位置,你能帮我吗? - Kishore

6
将以下内容放入您的清单文件中的活动声明中: <activity android:windowSoftInputMode="adjustPan|adjustResize"> </activity> 如果您愿意,也可以在您的活动的onCreate()方法中添加此代码。
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

2
清单代码错误,这样的行为是未定义的(您设置了两个冲突的值,请参阅 offdoc: https://developer.android.com/guide/topics/manifest/activity-element.html ,android:windowSoftInputMode 描述)。@kiwicomb123,请选择一个参数,否则系统会为您选择(并且在另一个设备/ API 版本上,此选择可能会更改)。 - kpower

3
这是所需的全部内容:
<activity android:windowSoftInputMode="adjustResize"> </activity>

3
我通过在清单文件中添加代码来解决这个问题:
<activity android:name=".Login"
        android:fitsSystemWindows="true"
        android:windowSoftInputMode="stateHidden|adjustPan"
</activity>

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