多个文本视图或一个带可点击跨度的文本视图?

时间:2015-05-03 08:42:15

标签: android

我有一组模型,每个模型代表一个文字中的单词。它看起来像这样:

ArrayList<Word> text;

class Word {
    public String name;
    public boolean isPunctuationMark;

我需要在活动中呈现该文本。我还需要做的是,当长按一个单词时,我需要触发和事件,并显示一个对话框,其中包含特定于所选单词的信息。

我可以使用两种方法:

  1. 每个单词使用一个TextView小部件
  2. 使用一个TextView来保存整个文字,但将每个单词设为ClickableSpan
  3. 我已经开始实施第二种方法,但是对于可点击跨度的longClick事件没有原生支持,因此我必须自己实施。此外,乍一看似乎使用TextViews而不是ClickableSpans更容易突出显示所选单词的文字和背景。所以现在我正在考虑尝试第一种方法。在探索这些方法时,我有什么遗漏的东西吗?也许还有第三个更具体系结构的正确选项,更容易实现支持长按?

1 个答案:

答案 0 :(得分:1)

我建议您使用一个TextView,因为这是一个更高效的用户界面。如果要求ViewGroup来衡量所有孩子,那么只测量一千个孩子的速度要快得多。

我找到了一个很好的库,你可以尝试使用here。它在API级别14中使用getOffsetForPostion方法添加到TextView

  

public int getOffsetForPosition(float x,float y)

     

在API级别14中添加获取最接近的字符偏移量   指定的绝对位置。典型的用例是传递结果   getX()和getY()的方法。

     

参数x屏幕上某点的水平绝对位置   y屏幕上某点的垂直绝对位置返回   位置最接近的字符的字符偏移量   指定的位置。如果没有布局,则返回-1。