- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
出于言语治疗工具的目的,需要将文本文件呈现为可编辑句子或短语的列表,如下例所示。这相对容易。
可以根据需要添加、删除或拖动彩色标志到新位置,并且可以设置为对齐字符或snap-to-word(它们最终也会显示数据)。
这是通过子类 EditText
实现的,以利用所有内置功能,如自动换行、拼写检查、文本选择等。
文档中的短语或句子的数量可能很大,因此在这种情况下,在 ScrollView
中使用简单的 LinearLayout
来显示它们并不好。
为了有效地显示我的 FlaggedEditText
小部件,解决方案需要利用 View 回收,因此 ListView
是一个显而易见的考虑因素。但正如 S.O. 的数量所示。那里的问题,ListView
和 EditText
不能一起玩。
列表的要求是:
FlaggedEditText
小部件在触摸时获得焦点(包含 FlaggedEditText
的项目也被选中)。我已经尝试了许多 S.O.过去几天的问题,试图让 ListView 符合我的要求,但似乎都有自己的缺点,并导致代码乱七八糟。
ListView
替代品,它们对 EditText
更友好?EditText
在标准 ListView
中按需要工作?AdapterView
进行子类化,以制作我自己的 FlaggedEditText
特定 ListView
替代方案。但是,如果问题源于 AdapterView
而 ListView
也是一个间接子类,那么我就是在浪费时间。有人走过这条路吗?Jim 在下方的出色回应,以及 Romain Guy 和 Adam Powell 在 2010 年 Google I/O 上的旧演示文稿的最近浏览 The world of ListView提出了一个可能的解决方案。
在 I/O 演讲中提醒我,他们将 View 转换为位图以进行一些优化。由于一次只能关注一个 EditText
进行编辑,我想我可以子类化 ListView
以提供一个接口(interface),如果 ChoiceMode 是单一的,将给出所选项目的矩形和所选项目上方和下方 ListView
区域的位图。然后,这可用于临时覆盖 ListView
与垂直 LinearLayout
包含“上方”位图、 Activity FlaggedEditText
和“下方”位图。
通过这种方式,FlaggedEditText
小部件可以有效地充当 ListView
中的不可聚焦的 EditText
,但是当一个 Item 是选中,与临时叠加层交互。
“上方”和“下方”位图也可以很容易地着色以暗示不活动。
额外
事实上,我刚刚意识到我可能甚至不需要界面中所选项目的矩形。 “上方”和“下方”位图以及使用与 ListView
相同的 LayoutParams
的 FlaggedEditText
应该就足够了。
最佳答案
许多答案似乎都没有描述围绕这个“问题”的核心问题以及为什么它没有“解决”。您面临的“问题”是 EditText
可以展开和/或滚动,以及您的 ListView
。此外,扩展的软键盘会强制 ListView
重绘,从而导致跟踪焦点项出现问题。当某个项目获得焦点并具有动态内容时,触摸手势可能会导致用户体验困惑(例如,如果您触摸 EditText
中的某个项目,例如光标然后滑动,您是否希望光标移动?还是整个列表?)这会导致很多用户感到沮丧。
我确定您已经看过这篇文章:
Issues focusing EditTexts in a ListView (Android)
这会导致在 ListView
中正确显示元素、正确回收(重绘)问题以及正确获得焦点问题。创建一个扩展 AdapterView
的自定义类可能会奏效,但它可能仍然感觉像是一个 hack,并且可能不会像您希望的那样工作,或者需要付出很大的努力。
您将需要对自定义对象中的字体、图像和“可见”(或部分可见)项目进行大量后端测量,这些项目还负责键盘动画和双滚动(ListView
可以滚动,EditText
也可以 - 或者 EditText
会改变大小,迫使父自定义 AdapterView
确定它是否也应该滚动以及 View 是否由于从聚焦对象中添加或删除文本/图像而变得可见或不可见)。
如果您做出“EditText
永远不会大于 X 高度”这样的假设,那么您可能会让它工作,但显然这是一个非常定制的解决方案,这就是为什么它不容易已实现且不受一般支持。
此外,您还需要做出关于如何处理已滚动到屏幕之外的焦点项目的 UX 决策(您可以轻松跟踪它,但如果它滚动回到屏幕上,但它可能会打断用户对如何滑动的期望和触摸手势被处理——例如,EditText
中的光标是移动还是整个列表?如果触摸了图像,滑动是移动图像还是滚动列表?你可以假设它没有获得焦点,但是“重绘”事件可能会使其意外地失去焦点,就像当前的 ListView
实现一样。)换句话说,您可能会遇到许多意想不到的奇怪的 UX 问题...
您最好的解决方案可能是使用我在上面引用的帖子中提到的对话框弹出窗口。或者,当点击一个项目进行编辑时,您可以在 ListView
上方或下方显示一个布局。您可能会让 ListView
滚动并锁定到它 - 让它看起来就像在 ListView
中一样 - 但同样,软键盘很难做到这一点更改屏幕的可用部分 - 您可以期待“拖动”或“捕捉”效果的缓慢感觉。您将需要一个“完成”按钮...
要让您的自定义 EditText
处理此建议,您可以在 ListView
中禁用它并使其不可聚焦,然后在整个布局上放置一个空布局EditText
捕获和处理触摸/滑动/滑动事件。这种“隐形”布局可能是您真正拥有的唯一选择。
换句话说,您可能应该计划更改您的 UI/UX,而不是试图强制 Android 弄清楚如何处理这些布局的 UX 交互的几个动态的、可能冲突或不可预测的方面。
关于android - 避免 EditText 焦点问题的 ListView 替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27437635/
我之前在论坛上发布过这个,但我想我不太清楚。我有一个侧边栏 ListView 和一个包含我的控件的主面板。我想在 oncreate() 中突出显示 listview 中的 Activity 项,因为每
这里有没有人知道我如何通过 onTap() 扩展 ListView 项(在本例中为卡片)的内容 - 以显示更多选项?您知道那里有可以提供帮助的酒吧吗? 我已经看过了,但我不知道要搜索什么?我相信你们都
我的 ListView 控件有问题。我希望我的奇数行和偶数行具有不同的颜色,但我想通过代码而不是 FXML 来实现。例如: 第一行 - 绿色 第二行 - 红色 第三行 - 绿色 第四行 - 红色 现在
我有一个 ListView 。我想让单元格背景透明。目前,我正在做以下事情: .list-cell { -fx-background-color: transparent; } 但是,细胞的颜
我想创建一个几乎无限的元素列表,但我想将列表的初始位置设置为某个特定元素。像这张图片: 其中索引 0 将是初始位置,并且此列表可能会也可能不会在两个方向上延伸很长。 我可以像这样创建我的元素: W
有没有办法在JavaFX中获取ListView的可见项?我想确定 JavaFX 应用程序中 ListView 显示的第一个可见项。 以下代码found here不适合我(仅适用于 TableView)
开发人员。 我尝试在水平方向拉伸(stretch) ListView 项目。我确实重置了 ItemContainerStyle ,并且水平对齐是拉伸(stretch)的。这是 MainPage.xam
有没有办法在JavaFX中获取ListView的可见项?我想确定 JavaFX 应用程序中 ListView 显示的第一个可见项。 以下代码found here不适合我(仅适用于 TableView)
我想问一下: 我有一个预定义顺序的数组。 var order=new Array(); order[0]="Tesco"; order[1]="Interspar"; order[2]="
我希望创建以下内容:当到达内部 Listview 的顶部或底部时,我想继续在顶部 Listview 中滚动。见动图: Gif of what I got so far 一个选项是在到达底部时将内部 L
我正在尝试在 ajax 发布后刷新 jQuery 移动 ListView ,我一直在尝试使用 .trigger("create") 来执行此操作,如下所示: Most Played
我真的不明白是什么导致了错误我检查了文档,这里有一个非常相似的例子是我的 views.py,我使用的应用程序下的 urls.py 包含,以及模板 View .py class SchoolListVi
我有这个父布局 parent_listview 的列表项具有这种布局 child_listview 的项目有这个布局
我在单击列表项时获取 listview 项 时遇到问题。我得到了 simple listview(Arrayadapter) 的 listview item,但我遇到了 custom listview
我有一个工作正常的 DropdownMenu,但我需要一个 ListView,但我无法转换它。 DropdownMenu 如下所示: // Create the List of devices t
我想实现一个可滚动(垂直)且其中包含元素的屏幕。所以我把它放在 listview.builder 上。问题是,其中一个元素是另一个水平滚动的 listview.builder。当我实现它时,horiz
帮助!我想不通! 为了帮助我学习 SwiftUI,我正在使用 ListView 制作一个简单的杂货 list 应用程序。点击列表中的每个项目时,有些按钮会变成绿色或红色。 在我向列表数组中添加太多项目
所以我知道我们可以等待 ListView 加载,然后显示它。但是,如果我们动态加载正在下载的图像,ListView 将加载但图像尚未加载,因此它们不会出现在 ListView 中。 可接受的等待 Li
我是 Android 的新手,正在努力提高编程技能。 在这里,我有自定义 ListView 适配器类,我曾在其中显示 ListView 项目,如 TextView 、图像等。 我需要做的是,我在 Li
So, what I want is to individually disable a button for the concerned item in the ListView when clic
我是一名优秀的程序员,十分优秀!