显示软键盘后获取列表视图项位置

时间:2015-06-12 11:49:17

标签: android listview location on-screen-keyboard

我有一个ListView,它位于动作栏上方和EditText上方。 见图: The original looking

列表视图项根据其内容具有随机高度。

当点击列表视图项时,我需要关注EditText并打开软键盘,同时我希望点击的那个位于列表视图的顶部,例如,如果我点击item2,我想看到:

After clicking an item

为了将点击的项目置于列表视图的顶部,当点击某个项目时,我将按其位置获取所点击的项目View,并调用view.getLocationOnScreen(locations)获取其y位置,并使用此y减去操作栏的高度,然后我得到滚动的距离,最后呼叫listview.smoothScrollBy(distance, 100);

这种方法在显示软键盘后效果很好,因为列表视图的高度将被固定;但是当我第一次单击列表视图项时它不能很好地工作,因为此时,当软键盘占用一些空格时,列表视图的高度将会改变,这导致当我使用view.getLocationOnScreen(locations)时,它返回视图的旧位置, old 表示显示软键盘之前的位置,我也尝试使用view.postDelayed(new Runnable() {//Gets view position here!}, 1000);,但是获得了相同的位置。< / p>

所以问题应该是如何在显示键盘后获得最新位置?

我将android:transcriptMode="normal"用于ListView,将adjustResize用于windowSoftInputMode

编辑:

还尝试了int firstVisiblePos = commentsListView.getFirstVisiblePosition(); int offset = firstVisiblePos - clickedPosition; commentsListView.smoothScrollByOffset(offset);,但仍然没有帮助。

2 个答案:

答案 0 :(得分:0)

您不必使用屏幕高度滚动listView。您可以使用ListView的smoothScrollToPosition(int position)滚动到列表中的特定位置。

答案 1 :(得分:0)

commentsListView.setSelection(clickedPosition + 1);,得到它,只是这对我有用,虽然它没有动画(不流畅),对我来说已经足够好了,为了使平滑滚动到位,使用这个答案[link] { {3}}