当前位置: 首页 > 知识库问答 >
问题:

软键盘显示后获取listview项目位置

陈欣荣
2023-03-14

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

单击列表视图项时,我需要关注EditText并打开软键盘,同时我希望被单击的项位于列表视图的顶部,例如,如果单击项2,我希望看到:

为了将单击的项目放在listview的顶部,当单击项目时,我将根据其位置获取单击的项目视图,并调用<code>视图。GetLocationOn Screen(locations)获取其y位置,并使用该y减去actionbar的高度,然后获得滚动的距离,最后调用<code>listview。平滑滚动(距离,100)

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

那么问题应该是键盘显示后如何获得最新位置?

我对ListView使用< code > Android:transcript mode = " normal " ,对< code>windowSoftInputMode使用< code > adjust size 。

编辑:

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

共有2个答案

皇甫琛
2023-03-14

< code > comments listview . set selection(clicked position 1);,明白了,简单地说,这对我来说很有用,虽然它没有动画(不平滑),但对我来说已经足够好了,为了使平滑滚动到位置,请使用这个答案[link]smoothScrollToPositionFromTop()并不总是像它应该的那样工作

强硕
2023-03-14

您不必使用屏幕高度来滚动listView。您可以使用ListView的平滑滚动到列表中的特定位置。

 类似资料:
  • 我有带有edittext字段的自定义模板。当我点击软键盘上的“下一步”按钮时,它只移动了两次焦点--比按钮变成了“确定”。清单有12项。有没有办法导航到所有的项目,而不仅仅是2?你能帮帮我吗? 公共视图getView(int position,View convertView,ViewGroup parent){ }

  • 我们正在做一个类似Whatsapp的应用程序,所以我们展示了一个表情面板或软键盘。我们正在使用adjustResize,因为我们需要获得软键盘的高度(为了确保表情面板与软键盘具有相同的高度),一切都正常,但是,当从表情面板更改为键盘时,我们看到edittext如何到达底部,然后随着软键盘上升。 在显示软键盘时,如何修复edittext?在显示键盘之前,我曾考虑过从adjustResize更改为ad

  • 我的问题是我需要知道键盘隐藏和显示事件,如何找出这一点?

  • 我有多个不同的列表视图适配器。每个列表视图适配器都有一些编辑文本。当用户编辑编辑编辑文本时,将显示软键盘。我想更新编辑文本中的文本,当用户点击“返回”按钮关闭键盘时。 为了更新信息,我需要知道哪个适配器类正在处理,这个editText的哪个位置正在编辑,以及文本的内容。 我已经在谷歌上搜索了所有可能的解决方案。有一个可以设置自定义editText类,并覆盖函数。这个解决方案无法给我提供我想要的所有

  • 问题内容: 我一直在尝试使此scrollview滚动,但这样做没有任何运气。我尝试了多种修复程序,但似乎无法正常工作。我希望能够在选择一个编辑框并且键盘占据一半屏幕的情况下滚动浏览我的页面。这样,我可以导航到其余的编辑框和页面底部的接受按钮,而不必每次都手动隐藏键盘。 这是我的xml代码: (请有人帮我弄清楚这件事,它使我发疯!!)。我还要提及的是,我曾与遇到类似问题的人一起尝试过大多数修复程序,

  • 问题内容: 请向我解释有关软键盘的问题。例如,我的活动,对话框片段或片段活动(无论如何)上都有一个EditText。这里是: 当它第一次显示时,我没有看到软键盘,必须按下editText才能获得焦点,然后出现键盘。另一个活动有所不同,当它出现在屏幕上时,将在没有任何帮助的情况下加载键盘。我认为 表示EditText将被聚焦并且键盘将出现,但是我错了。 我应该如何管理哪个组件将获得焦点,键盘将 自动