出于语言治疗工具的目的,需要将文本文件作为可编辑句子或短语的列表呈现,如下面的示例所示。这相对容易。
可以根据需要添加,删除或拖动彩色标记到新位置,并可以设置为 对齐字符 或 snap-to-word (它们最终也会显示数据)
这是通过对EditText
进行子分类来实现的,以利用所有内置功能,如自动换行,拼写检查,文本选择等。
文档中的短语或句子数量可能很大,因此在LinearLayout
中使用简单ScrollView
来显示它们在这种情况下并不好。
为了有效地显示我的FlaggedEditText
小部件,解决方案需要利用视图回收,因此ListView
是一个明显的考虑因素。但正如S.O.的数量所示。那里的问题,ListView
和EditText
并不能很好地结合在一起
列表的要求是:
FlaggedEditText
小部件在触摸时会得到关注(包含FlaggedEditText
的项目也会被选中)。我已尝试过许多S.O.中提出的众多方法。过去几天的问题,尝试将ListView弯曲到我的要求,但似乎都有自己的缺点,导致hacky,凌乱的代码。
ListView
的任何现有替代品,EditText
更友好?EditText
按照标准ListView
的要求正常工作?AdapterView
进行子类化,以制作我自己的FlaggedEditText
具体ListView
替代方案。但如果问题源于AdapterView
ListView
也是一个间接的子类,那么我就是在浪费时间。有没有人走过这条路?Jim下面的精彩回应,最近观看了Romain Guy和Adam Powell的旧版Google I / O 2010演示文稿The world of ListView,提出了一个可能的解决方案。
在I / O谈话中,我被提醒他们将视图转换为位图以进行一些优化。由于每次只有一个EditText
可以集中进行编辑,我认为我可以子类ListView
来提供一个接口,如果ChoiceMode是单一的,它将给出一个Rect所选项目上方和下方的ListView
区域的选定项目和位图。然后,可以使用此选项暂时将ListView
覆盖为包含""的垂直LinearLayout
。位图,有效FlaggedEditText
和"低于"位图。
通过这种方式,FlaggedEditText
窗口小部件可以在EditText
中有效地充当不可聚焦的ListView
,但是当选择一个项目时,交互就是临时覆盖。
"以上"和"以下"也可以很容易地对位图进行着色以表明不活动。
其他
事实上,我刚刚意识到我可能甚至不需要界面中所选项目的Rect。 "以上"和"以下"根据{{1}}使用相同FlaggedEditText
的位图和LayoutParams
就足够了。
答案 0 :(得分:2)
那里的许多答案似乎没有描述围绕这个"问题的核心问题"以及它为什么不被解决。" "问题"你面临的是EditText
可以与你的ListView
一起扩展和/或滚动。此外,扩展的软键盘强制ListView
重绘,从而导致跟踪焦点项目的问题。当一个项目聚焦并具有动态内容时,可以通过触摸手势发生UX混淆(例如,如果您触摸EditText
中的项目,如光标然后滑动,您是否希望光标移动?或整个列表?)它可能会导致很多用户沮丧。
我确定你已经看过这篇文章了:
Issues focusing EditTexts in a ListView (Android)
这会在正确显示ListView
中的元素,正确回收问题(重绘)和正确获得焦点的问题方面产生问题。创建一个扩展AdapterView
的自定义类可能会起作用,但它可能仍然感觉像是一个黑客,并且可能无法按照您的意愿工作,或者这将是一项巨大的努力。
你需要做很多后端测量的字体,图像和"可见"自定义对象中的(或部分可见的)项目也考虑了键盘动画和双重滚动(ListView
可以滚动,因此EditText
- 或EditText
的大小也会发生变化,强制父自定义AdapterView
确定是否还应该滚动以及视图是否因为从聚焦对象添加或删除文本/图像而变得可见或不可见。
如果你做出类似&#34的假设,那么EditText
永远不会大于X高度"然后你可以让它工作,但显然这是一个非常定制的解决方案,这就是为什么它不容易实现,一般不支持。
此外,您需要做出有关如何处理已滚动屏幕的焦点项目的UX决策(您可以轻松跟踪它,但如果它滚动回屏幕,但它可能会中断用户对如何滑动的期望和触摸手势处理 - 例如,EditText
中的光标移动或整个列表?如果触摸图像,滑动移动图像还是滚动列表?你可以认为它是没有集中注意力,但随后的重绘事件会让它意外失去焦点,就像当前的ListView
实施一样。)换句话说,你很可能会遇到许多意想不到的奇怪的UX问题。 ..
您最好的解决方案可能是使用上面引用的帖子中提到的对话框弹出窗口。或者,当点击要编辑的项目时,您可以在ListView
上方或下方显示布局。您可能会让ListView
滚动并锁定它 - 让它看起来好像在ListView
中 - 但是再一次,软键盘改变可用部分会很困难屏幕 - 你可以期待"拖动"或者对#34; snap"影响。你需要做一个"完成"按钮...
要让自定义EditText
使用此建议,您可以在ListView
中将其停用并使其无法调整焦点,然后在整个EditText
上放置一个空白布局捕获并处理触摸/甩/滑动事件。这"看不见"布局可能是你真正拥有的唯一选择。
换句话说,您可能应该计划更改UI / UX,而不是试图强制Android弄清楚如何处理这些布局的UX交互的几个动态的,可能相互矛盾或不可预测的方面。