【问题标题】:Get listview item position after soft keyboard shown显示软键盘后获取列表视图项位置
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

    • 对不起,这对我不起作用,当我尝试调用smoothScrollToPosition(0) 时,它甚至无法滚动到列表视图的第一项。
    【解决方案2】:

    commentsListView.setSelection(clickedPosition + 1);,明白了,这对我有用,虽然它没有动画(不平滑),但对我来说已经足够了,为了使平滑滚动到位置,使用这个答案 [链接]smoothScrollToPositionFromTop() is not always working like it should

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-24
      • 2016-01-08
      • 1970-01-01
      • 1970-01-01
      • 2011-12-27
      • 1970-01-01
      • 2012-09-24
      • 2020-09-20
      相关资源
      最近更新 更多