60

我到处寻找解决问题的方法,但找不到答案。这就是问题所在。

我有一个看起来像这样的布局

图片在这里

现在,当我单击编辑文本(搜索栏)时,我希望发生以下情况

图片在这里

软键盘基本上需要将整个屏幕内容向上推,使搜索栏在顶部,其列表视图在其下方,以便在搜索内容时显示结果。我尝试在清单中设置android:windowSoftInputMode="adjustPan"Activity但这不起作用。我将滚动视图设置为包含片段的主布局中的主容器,但这也不起作用。我尝试将编辑文本(搜索栏)作为标题添加到列表视图,但这也不起作用。每次键盘向上推编辑文本但覆盖列表视图。有什么办法可以使这项工作?

4

11 回答 11

76

实际上,如果您希望整个布局向上平移,则应该使用:

SOFT_INPUT_ADJUST_PAN

意义:

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

这将使键盘保持关闭状态,打开时它将推动您的整个活动。

于 2015-01-18T17:17:46.123 回答
20

这可以在片段类中用于向上移动编辑文本并滚动到最后。

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

如果您的 Fragment Activity 主题不在全屏中,这肯定会起作用。

希望这会有所帮助!

于 2014-04-17T10:12:42.103 回答
11

这对我有用。

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE|WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
于 2014-06-14T14:26:22.507 回答
10

我遇到了类似的问题,解决方案很简单。

如果活动中的主题设置为 Fullscreen @android:style/Theme.Holo.NoActionBar.FullScreen,则键盘没有向上推动内容。

在我将活动更改为 后@android:style/Theme.Holo.NoActionBar,键盘现在将活动内容向上推。

于 2012-12-19T18:11:04.487 回答
10

尝试这个

android:windowSoftInputMode="adjustResize"

为我工作。

于 2015-10-16T15:08:48.177 回答
8

Try android:windowSoftInputMode="adjustResize" in your manifest file.

You might need to do android:windowSoftInputMode="adjustResize|adjustPan"... I don't really have anything comparable to your setup to test on...

Your problem is becasue of this (from the docs for adjustPan, emphasis mine):

The activity's main window is not resized to make room for the soft keyboard. Rather, the contents of the window are automatically panned so that the current focus is never obscured by the keyboard and users can always see what they are typing

Given that, your list is being obscured becasue the EditText on top has the focus. The only thing I can currently think of is to move the EditText so it is below the list. Then when pushed up, your list should still be visible above the EditText.

于 2012-07-02T12:29:20.130 回答
4

这对我有用,对于片段,只需在带有活动的清单中声明它:

android:windowSoftInputMode="adjustPan"

祝你好运!

于 2016-11-04T10:34:21.407 回答
3

我找不到让布局自动更改的解决方案,所以我不得不破解它。我使用在我的主要活动中找到的代码检测键盘何时打开。我刚刚添加了代码来调用一个方法,该方法在打开键盘时隐藏了我的前两个片段。这不是我真正想做的,但它确实有效。

于 2012-07-04T09:32:07.303 回答
1

我用它来EditText登录:

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN|WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

关于此方法的一些注意事项:

this是指上下文,因为getActivity()并不总是可取的

.SOFT_INPUT_STATE_HIDDEN  //for default hidden state when activity loads

.SOFT_INPUT_STATE_VISIBLE //for auto open keyboard when activity loads 

每次都有效!

于 2014-11-23T01:50:34.873 回答
1

如果有人仍然面临这个问题:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:id="@+id/view"
    android:fitsSystemWindows="true"
    android:layout_height="match_parent">

添加您的布局:

android:fitsSystemWindows="true"

我希望这可以解决您的问题 - 它对我有用。

于 2016-12-21T10:50:19.337 回答
0

在 kotlin 中: - 在您的 Activity on Create 和 In Fragment onCreateView 方法中添加这一行

activity!!.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
于 2019-12-03T08:40:25.927 回答