ChatGPT解决这个技术问题 Extra ChatGPT

显示软键盘时向上移动布局?

我在设置了 align bottom 属性的 RelativeView 中有一些元素,当软键盘出现时,这些元素被软键盘隐藏。

我希望它们向上移动,以便如果有足够的屏幕空间,它们会显示在键盘上方,或者使键盘上方的部分可滚动,以便用户仍然可以看到元素。

关于如何解决这个问题的任何想法?

来自 android developers blog 的更新参考
@Dinedal你如何将对齐底部属性设置为你的RelativeView???
我发布了一个简单的解决方案,不涉及向清单添加任何内容。只是一个简单的布局,其余的由 android 处理。请参阅stackoverflow.com/questions/15323758/…

j
joe

是的,请查看 this article on the Android developers' site,它描述了框架如何处理出现的软键盘。

android:windowSoftInputMode 属性可用于指定每个活动发生的情况:是否调整布局大小或是否滚动等。


B
Bobs

您也可以在 onCreate() 方法中使用此代码:

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

对我来说,即使我将 adjustPan screnn 设置为仅向上移动到我单击的编辑文本,而不是整个布局
S
Serhii Bohutskyi

为您的活动添加 AndroidManifest.xml:

android:windowSoftInputMode="adjustPan|adjustResize"

根据文档,如果您在此处使用两个“调整...”标志,则行为未指定。请参阅developer.android.com/guide/topics/manifest/…
M
Mahmoud Mabrok

更改清单文件的活动,例如

android:windowSoftInputMode="adjustResize"

或者

在 Activity 类中更改您的 onCreate() 方法,例如

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

为什么你使用不同的标志?
当前版本需要 android 前缀:android:windowSoftInputMode="adjustResize"
I
Ido Barnea

我在布局中遇到了类似的问题,其中包含滚动视图。每当我尝试在 EditText 中选择文本时,复制/剪切/粘贴操作栏都会使用下面的代码向上移动,因此它不会调整布局大小

android:windowSoftInputMode="adjustPan"

通过将其修改为如下

AndroidManifest.xml android:windowSoftInputMode="stateVisible|adjustResize" style.xml 文件,活动风格为 true

它对我有用。


Z
Zahra.HY

在 AndroidManifest.xml 中,别忘了设置:

 android:windowSoftInputMode="adjustResize"

对于 ScrollView 内的 RelativeLayout ,设置:

 android:layout_gravity="center" or android:layout_gravity="bottom" 

会没事儿的


android:layout_gravity="center" 工作,谢谢! :) 现在 EditText 按我的意愿在键盘上移动
R
Rahul_Pawar

对于 Activity 在其 oncreate 方法中插入以下行

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

以及 onCreate 方法中的片段

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

有用。谢谢! :)
V
Vlad

向上滚动屏幕有 3 个步骤。

为您的活动写入清单文件:

android:windowSoftInputMode="adjustResize"

在活动的 oncreate() 方法中添加以下行

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE|WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

然后将您的整个视图放在 XML 文件中的“Scrollview”中,例如:

....... ..

P
Prakash Reddy
<activity name="ActivityName"
    android:windowSoftInputMode="adjustResize">
    ...
</activity>

在要滚动的布局周围添加 NestedScrollView,这将完美地工作


C
CoolMind

我尝试了 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>

D
Diego Ramírez Vásquez

我找到了一个解决我的问题的方法,它和你的差不多。

首先,我只有一个带有 2 个元素的 LinearLayout,一个 ImageView 和一个包含 2 个 EditText 和一个 Button 的 LinearLayout,所以我需要在没有键盘的情况下将它们分开全屏,当键盘出现时,它们应该看起来更近一些。

所以我在它们之间添加了视图,高度属性为 0dp,重量为 1,这让我的视图彼此分开。当键盘出现时,由于它们没有固定高度,它们只是调整大小并保持外观。

瞧!当键盘存在或不存在时,布局调整大小和视图之间的距离是相同的。


你为什么不发布代码,以便更好地理解?
我在上面发布了一个示例代码:stackoverflow.com/a/31994697/2914140
您可以通过使用 ConstraintLayout 并将顶部固定到顶部并将底部固定到底部,以一种不那么老套的方式实现这一点。当键盘打开时,它会自然地通过挤压中间的空间来调整大小(如果你使用 adjustResize
D
Darush

我刚刚在顶层布局中添加了以下行,一切正常:

android:fitsSystemWindows="true"

@yash786 可能是在edittext 下方显示获得焦点的按钮?第二个问题你能分享你的布局文件或回答我你是如何在键盘顶部添加edittext的吗?
它适用于我没有 android:windowSoftInputMode="stateVisible|adjustResize" 的事件
O
OhhhThatVarun

如果用户希望使用清单执行此任务,则在清单中添加此行 在清单中添加此行: - android:windowSoftInputMode="adjustPan" 例如

在 Java 文件或 Kotlin 文件中(以编程方式):- 如果用户想要使用 Activity,则在 onCreate 方法中添加以下行

activity?.window()?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE)

您好,欢迎来到 stackoverflow,感谢您的回答。您能否简单地解释一下您解决了什么问题以及您是如何解决的,而不是仅仅发布一段代码?这将有助于以后发现这个问题的人更好地理解这个问题以及如何处理它。
D
Dantalian

这是完整的清单代码

<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>

S
Shivam Garg

在您的清单文件中添加以下行。它会工作

<activity name="MainActivity"
    android:windowSoftInputMode="stateVisible|adjustResize">
    ...
</activity>

在我的情况下,stateVisible 丢失了。
d
duggu

如果您处于片段中,那么您必须将以下代码添加到您的活动中的 onCreate 它为我解决了问题

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

O
Omar Boshra

好吧,这已经很晚了,但是我发现如果您在编辑文本下添加一个列表视图,那么键盘将移动该编辑文本下的所有布局而不移动列表视图

<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**

这是唯一对我有用的解决方案。


M
Mahbubur Rahman Khan

没有一个建议可以解决我的问题。 调整平移几乎与调整大小工作一样。如果我设置 Adjust Nothing 而不是布局不会向上移动,但它会隐藏我正在编写的底部的编辑文本。因此,经过 24 小时的持续搜索,我找到了 this source,它解决了我的问题。


S
Sharryy

可能有点晚了,但我想补充几点。在 Android Studio 版本 4.0.1 和 Gradle 版本 6.1.1 中,如果您在 Activity 中添加以下标志,windowSoftInputMode 将无法按预期工作:

getWindow().setFlags(
                WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
                WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
        );

在浪费了很多时间之后,我发现了那个黑客。为了使 adjustResizeAdjustPanwindowSoftInputMode 的任何属性正常工作,您需要将其从您的活动中删除。


T
Tippu Fisal Sheriff

使用 Scroll View 作为父级并在 Scroll View 中使用此标记

机器人:fillViewport="真"


A
Antoine

将此行添加到视图中:

view.requestFocus();

M
Martin Vichev

在查看了很多解决方案后,这对我有用:

AndroidManifest.xml 中,将以下行添加到项目清单文件中的活动声明中。

android:windowSoftInputMode="stateHidden|adjustPan" 

代码应如下所示:

    <activity
        android:name=".MainActivity"
        android:screenOrientation="landscape"
        android:windowSoftInputMode="stateHidden|adjustPan">
    </activity>

链接坏了。
对于那个很抱歉。刚刚编辑了答案,尝试使用这个版本(将“stateVisible”更改为“stateHidden”并添加了“adjustPan”)。以前的版本现在也不适合我。