【发布时间】:2015-06-12 11:49:17
【问题描述】:
我有一个 ListView,它位于操作栏下方和 EditText 上方。 见图片:
列表视图项根据其内容具有随机高度。
当点击列表视图项目时,我需要关注EditText并打开软键盘,同时我希望被点击的项目位于列表视图的顶部,例如如果我点击item2,我想看到:
为了把被点击的item放到listview的顶部,当点击一个item时,我会通过它的位置得到被点击的itemView,然后调用view.getLocationOnScreen(locations)得到它的y位置,然后用这个y减去actionbar的高度,然后我得到了滚动的距离,最后调用listview.smoothScrollBy(distance, 100);。
这种方法在显示软键盘后效果很好,因为列表视图的高度将被固定;但是第一次单击列表视图项时效果不佳,因为此时列表视图的高度会随着软键盘占用一些空间而改变,这导致当我使用view.getLocationOnScreen(locations)时,它会返回旧的视图的位置,old 表示软键盘显示之前的位置,我也尝试使用view.postDelayed(new Runnable() {//Gets view position here!}, 1000);,但得到了相同的old位置。
那么问题应该是如何获取键盘显示后的最新位置?
我将android:transcriptMode="normal" 用于ListView,adjustResize 用于windowSoftInputMode。
编辑:
也尝试了int firstVisiblePos = commentsListView.getFirstVisiblePosition();
int offset = firstVisiblePos - clickedPosition;
commentsListView.smoothScrollByOffset(offset);,但仍然没有帮助。
【问题讨论】:
标签: android listview location on-screen-keyboard