我有一组模型,每个模型代表一个文字中的单词。它看起来像这样:
ArrayList<Word> text;
class Word {
public String name;
public boolean isPunctuationMark;
我需要在活动中呈现该文本。我还需要做的是,当长按一个单词时,我需要触发和事件,并显示一个对话框,其中包含特定于所选单词的信息。
我可以使用两种方法:
TextView
小部件TextView
来保存整个文字,但将每个单词设为ClickableSpan
我已经开始实施第二种方法,但是对于可点击跨度的longClick
事件没有原生支持,因此我必须自己实施。此外,乍一看似乎使用TextViews
而不是ClickableSpans
更容易突出显示所选单词的文字和背景。所以现在我正在考虑尝试第一种方法。在探索这些方法时,我有什么遗漏的东西吗?也许还有第三个更具体系结构的正确选项,更容易实现支持长按?
答案 0 :(得分:1)
我建议您使用一个TextView
,因为这是一个更高效的用户界面。如果要求ViewGroup
来衡量所有孩子,那么只测量一千个孩子的速度要快得多。
我找到了一个很好的库,你可以尝试使用here。它在API级别14中使用getOffsetForPostion方法添加到TextView
。
public int getOffsetForPosition(float x,float y)
在API级别14中添加获取最接近的字符偏移量 指定的绝对位置。典型的用例是传递结果 getX()和getY()的方法。
参数x屏幕上某点的水平绝对位置 y屏幕上某点的垂直绝对位置返回 位置最接近的字符的字符偏移量 指定的位置。如果没有布局,则返回-1。