我到处寻找解决我的问题但找不到答案的方法。这是问题所在。
我有一个看起来像这样的布局
现在,当我点击编辑文本(搜索栏)时,我希望以下内容发生
软键盘基本上需要向上推整个屏幕内容,以便搜索栏位于顶部,其列表视图位于其下方,以便在搜索内容时显示结果。我尝试将android:windowSoftInputMode="adjustPan"
设置为清单中的Activity
,但这不起作用。我将滚动视图设置为主布局中的主容器,其中包含片段,但也无效。我已经尝试将编辑文本(搜索栏)作为标题添加到列表视图中,但这也不起作用。每次键盘向上推动编辑文本但覆盖列表视图。有没有办法让这项工作?
答案 0 :(得分:73)
实际上,如果你希望你的整个布局比你应该使用的那样:
SOFT_INPUT_ADJUST_PAN
含义:
getActivity().getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
这将使键盘保持关闭状态,打开时它会推动整个活动。
答案 1 :(得分:19)
可以在Fragment Class中使用它来向上移动编辑文本并滚动到结束。
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE|WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
如果您的片段活动主题不在FullScreen中,这将有效。
希望这会有所帮助!
答案 2 :(得分:10)
这对我有用。
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE|WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
答案 3 :(得分:9)
我遇到了类似的问题,解决方案很简单。
如果活动中的主题设置为全屏@android:style/Theme.Holo.NoActionBar.FullScreen
,则键盘不会推送内容。
我将活动更改为@android:style/Theme.Holo.NoActionBar
后,键盘正在推动活动内容。
答案 4 :(得分:9)
试试这个
android:windowSoftInputMode="adjustResize"
为我工作。
答案 5 :(得分:7)
在清单文件中尝试android:windowSoftInputMode="adjustResize"
。
您可能需要执行android:windowSoftInputMode="adjustResize|adjustPan"
...我没有任何可与您的设置相媲美的测试......
你的问题是因为(来自adjustPan的文档,强调我的):
活动的主窗口未调整大小以便为软件腾出空间 键盘。相反,窗口的内容会自动平移 这样当前焦点永远不会被键盘和用户遮挡 总能看到他们正在打字的内容
鉴于此,由于顶部的EditText具有焦点,因此您的列表被遮挡了。我目前唯一能想到的就是移动EditText,使其低于列表。然后,当向上推时,您的列表仍应显示在EditText上方。
答案 6 :(得分:4)
这对我有用,对于片段,只需在Manifest中用活动声明它:
android:windowSoftInputMode="adjustPan"
祝你好运!
答案 7 :(得分:3)
我找不到自动更改布局的解决方案,所以我不得不破解它。我在主活动中使用了我发现here的代码来检测键盘何时打开。我刚刚添加了代码来调用一个方法,该方法在键盘打开时隐藏了我的前两个片段。这不是我想要做的,但它确实有效。
答案 8 :(得分: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
每次都有效!
答案 9 :(得分: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"
我希望这能解决你的问题 - 它对我有用。
答案 10 :(得分:0)
在kotlin中:-在“创建活动”和“ onCreateView方法的片段”中添加此行
activity!!.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);