我在设置了 align bottom 属性的 RelativeView 中有一些元素,当软键盘出现时,这些元素被软键盘隐藏。
我希望它们向上移动,以便如果有足够的屏幕空间,它们会显示在键盘上方,或者使键盘上方的部分可滚动,以便用户仍然可以看到元素。
关于如何解决这个问题的任何想法?
我在设置了 align bottom 属性的 RelativeView 中有一些元素,当软键盘出现时,这些元素被软键盘隐藏。
我希望它们向上移动,以便如果有足够的屏幕空间,它们会显示在键盘上方,或者使键盘上方的部分可滚动,以便用户仍然可以看到元素。
关于如何解决这个问题的任何想法?
是的,请查看Android 开发者网站上的这篇文章,该文章描述了框架如何处理出现的软键盘。
该android:windowSoftInputMode
属性可用于指定每个活动发生的情况:是否调整布局大小或是否滚动等。
您也可以在onCreate()
方法中使用此代码:
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
为您的活动添加 AndroidManifest.xml:
android:windowSoftInputMode="adjustPan|adjustResize"
更改清单文件的活动,例如
android:windowSoftInputMode="adjustResize"
或者
onCreate()
在活动类中更改您的方法,例如
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
我在布局中遇到了类似的问题,其中包含滚动视图。每当我尝试在 EditText 中选择文本时,复制/剪切/粘贴操作栏都会使用下面的代码向上移动,因此它不会调整布局大小
android:windowSoftInputMode="adjustPan"
通过将其修改为如下
AndroidManifest.xml
android:windowSoftInputMode="stateVisible|adjustResize"
style.xml 文件,活动风格
真的
它对我有用。
在 AndroidManifest.xml 中,别忘了设置:
android:windowSoftInputMode="adjustResize"
对于 ScrollView 内的 RelativeLayout ,设置:
android:layout_gravity="center" or android:layout_gravity="bottom"
会好起来的
对于 Activity 在其 oncreate 方法中插入以下行
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" 。
<activity name="ActivityName"
android:windowSoftInputMode="adjustResize">
...
</activity>
在要滚动的布局周围添加 NestedScrollView,这将完美地工作
我尝试了 Diego Ramí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>
我找到了一个解决我的问题的方法,它和你的差不多。
首先,我只有一个带有 2 个元素的 LinearLayout,一个 ImageView 和一个包含 2 个 EditText 和一个 Button 的 LinearLayout,所以我需要在没有键盘的情况下将它们分开全屏,当键盘出现时,它们应该看起来更近一些。
所以我在它们之间添加了视图,高度属性为 0dp,重量为 1,这让我的视图彼此分开。当键盘出现时,由于它们没有固定高度,它们只是调整大小并保持外观。
瞧!当键盘存在或不存在时,布局调整大小和视图之间的距离是相同的。
在 Java 文件或 Kotlin 文件中(以编程方式):- 如果用户想要使用 Activity,则在 onCreate 方法中添加以下行
activity?.window()?.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>
在您的清单文件中添加以下行。它会工作
<activity name="MainActivity"
android:windowSoftInputMode="stateVisible|adjustResize">
...
</activity>
我刚刚在顶层布局中添加了以下行,一切正常:
android:fitsSystemWindows="true"
如果您处于片段中,那么您必须将以下代码添加到您的活动中的 onCreate 它为我解决了问题
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
在查看了很多解决方案后,这对我有用:
AndroidManifest.xml
将以下行添加到项目清单文件中的活动声明中。
android:windowSoftInputMode="stateHidden|adjustPan"
代码应如下所示:
<activity
android:name=".MainActivity"
android:screenOrientation="landscape"
android:windowSoftInputMode="stateHidden|adjustPan">
</activity>
好吧,这已经很晚了,但是我发现如果您在编辑文本下添加一个列表视图,那么键盘将移动该编辑文本下的所有布局而不移动列表视图
<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**
这是唯一对我有用的解决方案。
没有一个建议可以解决我的问题。调整平移几乎就像工作调整调整大小一样。如果我设置了只调整布局而不是向上移动,但它隐藏了我正在编写的底部的编辑文本。因此,经过 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
);
在浪费了很多时间之后,我发现了那个黑客。为了使adjustResize
orAdjustPan
的任何属性windowSoftInputMode
正常工作,您需要将其从您的活动中删除。
使用 Scroll View 作为父级并在 Scroll View 中使用此标记
机器人:fillViewport="真"
将此行添加到视图中:
view.requestFocus();