【问题标题】:ANDROID - textview find lineindex with string ; search in textview by linenumberANDROID - textview 用字符串查找 lineindex ;按行号在 textview 中搜索
【发布时间】:2014-02-08 21:21:21
【问题描述】:

我知道在文本视图中突出显示是可能的

Highlight Textview Using EditText

滚动文本视图也是可能的 (从这里获得滚动代码并且也成功滚动) textView scroll at first line

现在的问题是,我正在搜索并且我想突出显示该文本并导航到它,当有人按下搜索按钮时,突出显示部分是完美的,现在我可以获得字符串中单词的索引,但是不是文本视图中字符串的行号,

要点是如果我想在文本视图中找到某些文本的位置,即在哪个行号上,该怎么做?

我找到了答案,但后来我意识到它适用于 iOS Search occurrences of a string in a TextView

【问题讨论】:

标签: android search textview scrollview


【解决方案1】:

如果我错了,你想知道特定文本在字符串中的位置吗?如果是这样,那么您可以使用以下方法来做到这一点

String text = "0123hello9012hello8901hello7890";
String word = "hello";
Log.d("startOfWordPosition",text.indexOf(word)); // prints "4"
Log.d("endOfWordPosition",text.lastIndexOf(word)); // prints "22"

正如您所见,它会告诉您单词所在的位置,但您必须考虑一个单词可能不止一次出现的情况。如果您确定该单词只会出现一次,那么上面的代码非常适合您。如果没有,那么您将不得不以某种方式解决问题。

【讨论】:

  • 当然不是。我想知道是否将该字符串提供给文本视图。然后在文本视图中的哪个行号将特定文本。你看,这个属性不能由字符串本身决定,因为不同的设备有不同的大小,所以 textview 会以不同的方式在它们中展开。将特定的文本放在不同设备上的不同行号上。希望能澄清您的疑问。
【解决方案2】:

这适用于将文件加载到文本视图中,以便用户的最后选择或光标位置位于屏幕顶部。

        new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            page.setSelection(pos, pos2);
            Layout layout = page.getLayout();
            scroll.scrollTo(0, layout.getLineTop(layout.getLineForOffset(pos2)));           }
            }, 500);

page 是 TextView,pos 和 pos2 是 int 和用户最后一次选择的两端(如果只是光标,它们是相同的 int),scroll 是包含 textview 的滚动视图。由于 Android 加载所有这些对象的内部延迟问题,这一切都在 Handler 中。文件名、pos 和 pos2 在退出时保存为设置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-12
    • 2017-11-12
    相关资源
    最近更新 更多