我有一组模型,每个模型代表文本中的一个单词。它看起来像这样:
ArrayList<Word> text;
class Word {
public String name;
public boolean isPunctuationMark;
我需要在活动中渲染该文本。我还需要做的是,当长按一个单词时,我需要触发事件并显示一个对话框,其中包含特定于所选单词的信息。
我可以使用两种方法:
- use one
TextView
每个单词的小部件
- use one
TextView
保存整个文本,但使每个单词成为ClickableSpan
我已经开始实施第二种方法,但没有原生支持longClick
可点击跨度上的事件,所以我必须自己实现它。此外,乍一看,突出显示所选单词的文本和背景似乎更容易TextViews
而不是与ClickableSpans
。所以现在我正在考虑尝试第一种方法。在探索这些方法时我错过了什么吗?也许还有第三个在架构上更正确的选项,更容易实现支持长按?
我建议你使用一个TextView
因为这是一个更高效的用户界面。当有请求时ViewGroup
要测量它的所有子项,只测量一个比测量几千个要快得多。
我找到了一个不错的库,你可以尝试使用here https://github.com/qwerfrewq/textview_touch_word_select。它用获取位置偏移量 http://developer.android.com/reference/android/widget/TextView.html#getOffsetForPosition(float,%20float)方法添加到TextView
API 级别 14。
公共int getOffsetForPosition(浮点x,浮点y)
API级别14中添加获取最接近的字符偏移量
指定的绝对位置。一个典型的用例是传递结果
getX() 和 getY() 到此方法。
参数 x 屏幕上点的水平绝对位置
y 屏幕上点的垂直绝对位置 返回
位置最接近的字符的字符偏移量
指定位置。如果没有布局则返回-1。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)