7


0

Mettez en surbrillance du texte dans plusieurs contrôles EditText simultanément

J’ai le problème suivant: j’essaie de mettre en évidence du texte dans plusieurs contrôles EditText simultanément en appelant` viewXYZ.setSelection (int, int) `, mais la sélection n’est visible que dans la vue focalisée.

Existe-t-il un moyen de contourner cela, de mettre en évidence le texte dans un "EditText" non focalisé? Peut-être en surchargeant les méthodes onDraw ()?

1 Answer


4


_ Je sais, mais c’est (pour autant que je sache?) Le seul moyen de marquer du texte dans un contrôle EditText. _

EditText prend en charge les objets `` extensibles '', vous pouvez donc appliquer vous-même les reflets au texte (par exemple, les couleurs d’arrière-plan).

Cet exemple de projet montre un champ de recherche qui applique une couleur d’arrière-plan à un plus grand morceau de texte en fonction des résultats de la recherche. La partie clé est la méthode 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);
  }

Notez, cependant, que votre "chaîne de sortie" devrait probablement être un "TextView", pas un "EditText". EditText est pour l’entrée, pas la sortie.