web-dev-qa-db-fra.com

Existe-t-il un exemple de texte étendu et pouvant être étendu

J'ai du mal à utiliser EditText et l'objet texte extensible, Ces jours-ci, j'ai lu des documents API environ dix fois, même si je ne suis pas certain de bien comprendre. Je cherche donc une sorte d'exemple qui me montre comment utiliser EditText et Spannable.

28
skysign

Puisque vous ne spécifiez pas ce que vous ne pouvez pas saisir à partir de l'API, il est difficile de répondre à vos questions (réponse courte: réécrivez votre question en questions spécifiques plutôt qu'en général).

Un exemple typique de Spannable est quelque chose comme ceci pour transformer le texte sélectionné dans un EditText en italique:

Spannable str = mBodyText.getText(); 
if(mBodyText.getSelectionEnd() > mBodyText.getSelectionStart()) 
  str.setSpan(new StyleSpan(Android.graphics.Typeface.ITALIC),  
                      mBodyText.getSelectionStart(), mBodyText.getSelectionEnd(),  
                      Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
else
  str.setSpan(new StyleSpan(Android.graphics.Typeface.ITALIC),
              mBodyText.getSelectionEnd(),
              mBodyText.getSelectionStart(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

Ceci est coupé et collé d'autre chose, donc votre pastabilité directe a peut-être souffert, mais elle montre au moins un exemple de travail d'un Spannable (dans ce cas un StyleSpan). Dans l'API, vous pouvez trouver les autres types de Spans (notamment ImageSpan, qui est une question courante parmi les droiders nouvellement convertis).

32
andy

Je commence juste à essayer de le comprendre aussi, et cela semble inutilement délicat.

Voici une méthode de travail pour ajouter un nouveau texte extensible à une vue existante. Je voulais ajouter du texte en couleur à une vue, et cela semblait être la seule façon de le faire.

Bien que cela ressemble à un hack laid, vous pouvez créer un TextView factice (non affiché nulle part) et y styliser le texte, puis ajouter ce texte stylé où vous le souhaitez. Le mérite en revient à iifuzz sur anddev.org. Mon code ressemble à ceci:

    spanbuffer = new TextView(context);
    spanbuffer.setText(newText, TextView.BufferType.SPANNABLE);
    Spannable s = (Spannable) spanbuffer.getText();
    s.setSpan(new ForegroundColorSpan(Color.RED), 0, newText.length() - 1, 0);
    this.append(s);

Je pense que vous êtes censé être en mesure de créer un nouveau texte extensible à l'aide de SpannableFactory, comme ceci:

    Spannable s = Spannable.Factory.getInstance().newSpannable(newText);

mais je ne pouvais pas obtenir que ce texte montre réellement de nouveaux effets de span, alors j'ai abandonné.

10
Sam L.