显示Android软键盘时如何向上移动布局


85

EditTexts我的布局中有两个登录屏幕和一个登录按钮。问题是,当我开始键入内容时,软键盘会显示并覆盖登录按钮。出现布局时,如何向上或向上推键盘布局?

我不想使用ScrollView,只想实现它而无需向下滚动。请给我建议一些方法。提前致谢。

Answers:


59

windowSoftInputMode属性设置为adjustPanadjustResize

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

32
这不是开箱即用的,而是对其进行更改以<activity android:windowSoftInputMode="adjustResize"></activity>使其起作用。
nickiaconis 2014年

2
提及您使用的是哪个Android版本。在某些版本中,某些答案可能完全没有用。
2015年

正如@nickiaconis所说,我不需要'adjustPan'参数,它对我
有用

Xamarin.Forms便携式项目是否有等效的产品?因此我不必为每个目标平台都执行此操作。
user20358 '16

6
该设置必须是下表中列出的值之一,或者是一个“状态...”值加上一个“调整...”值的组合。在任一组中设置多个值(例如,多个“ state ...”值)会产生不确定的结果。developer.android.com/guide/topics/manifest/…–
EmJiHash

34

在与活动对应的android清单文件中尝试此操作。

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

1
我的忠诚度第一次提高,但是当关闭键盘并再次打开时,不动。
nabeghe

24

onCreate()方法中使用此代码:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

1
谢谢,有帮助。<activity android:windowSoftInputMode =“ adjustPan”> </ activity>由于某种原因对我不起作用。
DH28 2016年

1
这种方法,但使用SOFT_INPUT_ADJUST_RESIZE而不是ADJUST_PAN,为我工作
航次

16

只要

android:windowSoftInputMode="adjustResize"

在清单文件中的活动标签中可以解决问题


我正在使用ConstraintLayout,此解决方案不适用于我。
卡兰·夏尔马

在撰写此答案时,未在Android布局中添加ConstraintLayout。您可以在此线程上找到最适合您的其他解决方案。当然,一旦有时间,我一定会更新对ConstraintLayout的回答。感谢您的举报
Bhargav Thanki


10

我通过了解设备上软键盘的状态以某种方式实现了这一目标。当显示键盘时,我将布局移至y位置,而在未显示时将其移回其原始位置。这工作正常,请遵循此准则。


2
键盘显示时,我可以向上移动布局,但是键盘隐藏时却无法移动到其原始位置,您能在这方面帮助我吗
Kishore 2012年

9
android:fitsSystemWindows="true"

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

android:windowSoftInputMode="adjustResize"

在您的Activty上的Manifest.xml文件中添加行

对我来说是完美的工作。


fitsSystemWindows与键盘无关
蒂姆(Tim)

@TimCastelijns,就我而言(全屏活动)很重要。如果设置为false,视图将不会向上移动。
CoolMind

6

将其放在清单文件中的活动声明中 <activity android:windowSoftInputMode="adjustPan|adjustResize"> </activity>

或者如果您愿意,可以添加活动的onCreate()方法

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

1
清单代码是错误的,因此行为是不确定的(您设置了两个冲突值,请参见offdoc:developer.android.com/guide/topics/manifest/…android:windowSoftInputMode说明)。@ kiwicomb123,选择一个参数,否则系统将为您选择(此选择可以在另一设备/ API版本上更改)
kpower

3

这就是所需要的:

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

2

按照本指南,实现此目标的正确方法是在清单中声明:

<activity name="EditContactActivity"
        android:windowSoftInputMode="stateVisible|adjustResize">

    </activity>

看起来stateVisible会在活动开始时使它打开,因此没有必要实际向上推键盘。
CodyEngel's

2

当出现软键盘时,它会更改主布局的大小,您需要做的是为该主布局创建一个侦听器,并在该侦听器内添加代码scrollT0(x,y)以向上滚动。


2

如果您使用的是xamarin,则可以将此代码 WindowSoftInputMode =Android.Views.SoftInput.AdjustPan | Android.Views.SoftInput.AdjustResize放在MainActivity类的activity属性中。例如,现在activity属性将如下所示

    [Activity(WindowSoftInputMode =Android.Views.SoftInput.AdjustPan | Android.Views.SoftInput.AdjustResize)]
    public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsApplicationActivity
    {
        //some code here.
    }

0

利用相对布局,它将调整视图,以便您在键入文本时可以看到该视图


0

这对我来说就像一个魅力

getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

0

你应该用

android:windowSoftInputMode="adjustPan|stateHidden"

在您AndroidManifest.xml声明活动的文件中。当键盘显示在布局中时,这将调整布局内容。


-2

这绝对适合您。

android:windowSoftInputMode =“ adjustPan”


1
你能补充一些解释吗?
chevybow

只需转到您的AndroidManifest.xml文件,然后您要在键盘上向上滚动的该活动的此标记就会弹出
sanjay kumar
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.