【问题标题】:Highlight text in multiple EditText controls simultaneously同时突出显示多个 EditText 控件中的文本
【发布时间】:2012-06-01 21:15:29
【问题描述】:

我遇到了以下问题:我试图通过调用 viewXYZ.setSelection(int, int) 同时突出显示多个 EditText 控件中的文本,但选择仅在焦点视图上可见。

有没有什么办法可以绕过这个,在没有焦点的EditText 中突出显示文本?也许通过重载onDraw() 方法?

【问题讨论】:

  • setSelection() 不是“突出显示文本”,而是设置剪切/复制/粘贴操作的选择。因此,它只对有焦点的EditText 有意义。您在多个 EditText 小部件中突出显示文本的目标是什么?
  • 我知道,但它(据我所知?)在 EditText 控件中标记文本的唯一方法。我只是想实时转换某些输入字符串,如果你点击输入字符串的一部分,我想突出显示输出字符串的相应部分。

标签: java android android-edittext highlight


【解决方案1】:

我知道,但它(据我所知?)在 EditText 控件中标记文本的唯一方法。

EditText 支持Spannable 对象,因此您可以自己对文本应用高光(例如背景颜色)。

This sample project 演示了一个搜索字段,该字段根据搜索结果将背景颜色应用于较大的文本。关键部分是searchFor() 方法:

  private void searchFor(String text) {
    TextView prose=(TextView)findViewById(R.id.prose);
    Spannable raw=new SpannableString(prose.getText());
    BackgroundColorSpan[] spans=raw.getSpans(0,
                                             raw.length(),
                                             BackgroundColorSpan.class);

    for (BackgroundColorSpan span : spans) {
      raw.removeSpan(span);
    }

    int index=TextUtils.indexOf(raw, text);

    while (index >= 0) {
      raw.setSpan(new BackgroundColorSpan(0xFF8B008B), index, index
          + text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
      index=TextUtils.indexOf(raw, text, index + text.length());
    }

    prose.setText(raw);
  }

但请注意,您的“输出字符串”可能应该是 TextView,而不是 EditTextEditText 用于输入,而不是输出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    • 2020-12-24
    • 2011-01-10
    • 2018-03-05
    • 2020-01-15
    • 2011-05-01
    • 2011-03-03
    相关资源
    最近更新 更多