我在RelativeView中有一些元素,其中设置了align bottom属性,当软键盘出现时,这些元素被软键盘隐藏。
我希望它们向上移动,以便如果有足够的屏幕空间,它们将显示在键盘上方,或者使键盘上方的部分可滚动,以便用户仍可以看到元素。
关于如何解决这个问题的任何想法?
我在RelativeView中有一些元素,其中设置了align bottom属性,当软键盘出现时,这些元素被软键盘隐藏。
我希望它们向上移动,以便如果有足够的屏幕空间,它们将显示在键盘上方,或者使键盘上方的部分可滚动,以便用户仍可以看到元素。
关于如何解决这个问题的任何想法?
Answers:
是的,请查看Android开发人员网站上的这篇文章,其中描述了该框架如何处理出现的软键盘。
该android:windowSoftInputMode
属性可用于指定每个活动会发生什么:布局是否已调整大小或是否滚动等。
为您的活动添加AndroidManifest.xml:
android:windowSoftInputMode="adjustPan|adjustResize"
对清单文件的活动进行更改,例如
windowSoftInputMode="adjustResize"
要么
onCreate()
在活动类中对方法进行更改,例如
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
我面临的布局包含内部滚动视图的类似问题。每当我尝试在EditText中选择文本时,复制/剪切/粘贴操作栏都会随着以下代码向上移动,因此它不会调整布局大小
android:windowSoftInputMode="adjustPan"
通过如下修改
1)AndroidManifest.xml
android:windowSoftInputMode="stateVisible|adjustResize"
2)style.xml文件,处于活动样式
<item name="android:windowActionBarOverlay">true</item>
有效。!!!!!!!!!!!!
在AndroidManifest.xml中,请不要忘记设置:
android:windowSoftInputMode="adjustResize"
并为ScrollView中的RelativeLayout设置:
android:layout_gravity="center" or android:layout_gravity="bottom"
会好起来的
在其oncreate方法中为Activity添加行
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
以及其onCreate方法中的片段
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
有3个步骤可向上滚动屏幕。
android:windowSoftInputMode =“ adjustResize”
getWindow()。setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
<?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:background="@drawable/bg" android:layout_height="match_parent" > <RelativeLayout android:layout_width="fill_parent" android:layout_height="match_parent" android:layout_gravity="center" > <TextView /> ......... <TextView /> <EditText > <requestFocus /> </EditText> <Button /> </RelativeLayout> </ScrollView>
PS不要忘了在父级相对布局中添加android:layout_gravity =“ center”。
我尝试了迭戈·拉米雷斯(DiegoRamírez)的方法,它有效。在AndroidManifest中:
<activity
android:name=".MainActivity"
android:windowSoftInputMode="stateHidden|adjustResize">
...
</activity>
在activity_main.xml中:
<LinearLayout ...
android:orientation="vertical">
<Space
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="1" />
<EditText
android:id="@+id/edName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="@string/first_name"
android:inputType="textPersonName" />
<EditText ...>
...
</LinearLayout>
<activity name="ActivityName"
android:windowSoftInputMode="adjustResize">
...
</activity>
在您要滚动的布局周围添加NestedScrollView,这将完美地工作
我找到了与您的问题完全相同的解决方案。
首先,我只有一个带有2个元素的LinearLayout,一个ImageView和一个LinearLayout,其中包含2个EditText和一个Button,因此我需要在没有键盘的情况下将它们在全屏中分开,当键盘出现时,它们应该看起来更近一些。
因此,我在视图之间添加了高度属性为0dp和权重为1的视图,这些视图使我的视图彼此分开。当键盘贴合时,因为它们没有固定的高度,所以它们只是调整大小并保持外观。
瞧!无论是否使用键盘,布局调整大小和视图之间的距离都相同。
ConstraintLayout
然后将顶部固定在顶部,将底部固定在底部,以减少黑客攻击的方式实现这一目标。当键盘打开时,它将自然地通过压缩中间的空格(如果您使用adjustResize
)来调整大小
If user want this task using manifest then add this line in manifest
In manifest add this line: - android:windowSoftInputMode="adjustPan"
e.g.
<activity
android:name=".ui.home.HomeActivity"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustPan">
</activity>
In Java File or Kotlin File(Programically) : - If user want this using Activity then add below line in onCreate Method
activity!!.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
这是完整的清单代码
<activity
android:name=".activities.MainActivity"
android:windowSoftInputMode="adjustResize"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
如果您处于碎片状态,则必须在活动中将以下代码添加到onCreate上,这将为我解决问题
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
在清单文件中添加以下行。会工作的
<activity name="MainActivity"
android:windowSoftInputMode="stateVisible|adjustResize">
...
</activity>
好的,这已经很晚了,但是我发现,如果您在编辑文本下添加一个列表视图,那么键盘将在不移动ListView的情况下将所有布局移动到该编辑文本下
<EditText
android:id="@+id/et"
android:layout_height="match_parent"
android:layout_width="match_parent"
/>
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"//can make as 1dp
android:layout_below="@+id/et" // set to below editext
android:id="@+id/view"
>
**<any layout**
这是唯一对我有用的解决方案。
没有一个建议可以解决我的问题。调整平移几乎就像调整调整大小一样。如果我设置了Adjust Nothing,那么布局不会向上移动,但是会隐藏我正在写的底部的edittext。因此,经过24小时的连续搜索,我找到了这个来源,并且可以解决我的问题。
可能已经晚了,但我想补充一点。在Android Studio版本4.0.1和Gradle版本6.1.1中,windowSoftInputMode
如果您在Activity中添加以下标志,则该代码 将无法正常工作:
getWindow().setFlags(
WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
);
在浪费了很多时间之后,我发现了这个hack。为了使adjustResize
或的AdjustPan
任何属性windowSoftInputMode
正常工作,您需要从活动中删除该属性。