35

我正在尝试创建一个带有列表视图和底部发送消息的活动。问题是当键盘显示时,而不是推动底部内容,只是隐藏它。我尝试使用adjustPan,但它向上推动了孔视图(因此无法看到列表视图的顶部元素并且de actionbar也消失了)。

如果您看一下 WhatsApp 或 Line,其功能是当列表的最后一项显示在屏幕底部时,键盘会向上推列表视图(无需将操作栏或第一个元素移出屏幕),并且当列表的最后一项未显示时(向上滚动后),键盘隐藏在底部列表中(正常的调整大小)。

有人处理过这个问题吗?

谢谢

编辑:

我将尝试举一个视觉示例:

所以让我们说这个 ListView:

---item 1---  
---item 2---  
---item 3---  
---item 4---  
---EditText---

editText 不是 ListView 的一部分,而是底部对齐的 LinearLayout。当显示键盘时,ListView 变成这样(第 3 项和第 4 项被键盘隐藏):

---item 1---  
---item 2---  
---EditText---
---Keyboard---  

我想得到的是:

---item 3---  
---item 4---  
---EditText---
---Keyboard---  

我试过 android:windowSoftInputMode="adjustPan"。结果是第 3 项和第 4 项有效地被向上推,不再被键盘隐藏。问题是它推动了列表视图,但它把它推出了屏幕,所以 actionBar 消失了,即使尝试向上滚动,我也永远看不到显示键盘的项目 1 和项目 2。

希望我自己解释一下,不是很容易..

谢谢

4

3 回答 3

54

好的,我已经为您找到了解决方案,您想要做的基本上是让 ListView 每次都滚动到底部。您可以通过以下方式做到这一点:

ListView l = getListView();
l.setTranscriptMode(ListView.TRANSCRIPT_MODE_NORMAL);
l.setStackFromBottom(true);

如果是Activity,请在onCreate. 如果是Fragment,请在onViewCreated.

于 2013-04-23T17:23:51.293 回答
13

在您的布局 XML 中:

android:stackFromBottom="true"
android:transcriptMode="normal"
于 2014-01-08T14:28:51.027 回答
1

单线解决方案

list_view.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);
于 2015-08-11T10:06:58.490 回答