Je veux utiliser simplement des balises de la ressource XML String dans la liaison de données.

public class StringUtils {
    public static String text(String a) {
        return a;
    }
}

XML:

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@{StringUtils.text(@string/underlined_text)}" />

Chaîne :

    <string name="underlined_text">This is a <u>underlined</u> text.</string>

À la fin, lorsque j'ai débogué la méthode de texte, j'ai réalisé que la balise était supprimée.

0
invisbo 19 juin 2019 à 20:45

3 réponses

Meilleure réponse

Vous pouvez essayer d'utiliser des codes d'échappement HTML:

<string name="underlined_text">This is a &lt;u&gt;underlined&lt;/u&gt; text.</string>

Je me demande également si la liaison de données est vraiment nécessaire ici - vous pouvez simplement utiliser android:text="@string/underlined_text"

Modifier: Je suis également tombé sur cette réponse qui pourrait vous être utile

0
PPartisan 19 juin 2019 à 17:52

Que diriez-vous:

android:text="@string/underlined_text"

Vous pouvez modifier la chaîne définie comme ceci pour conserver la chaîne étendue:

<string name="underlined_text">This is a &lt;u&gt;underlined&lt;/u&gt; text.</string>
0
Deˣ 20 juin 2019 à 11:06

Il n'a jamais été là en premier lieu, très probablement.

Dans une ressource chaîne, les éléments HTML intégrés reconnus, comme <u>, sont interprétés comme faisant partie de la ressource. Si vous appelez getString(), ces éléments HTML sont supprimés. Si vous appelez getText() sur un Resources, vous obtenez un CharSequence qui contient le balisage (par exemple, UnderlineSpan).

Puisque vous utilisez String partout, vos éléments HTML seront ignorés.

Je ne sais pas exactement pourquoi vous configurez la liaison de données de cette façon. Si tu utilises:

android:text="@string/underlined_text"

Vous obtiendriez ce que vous voulez, et plus rapidement. Après tout, StringUtils ne fait rien.

Mais, si vous êtes vraiment sûr de vouloir utiliser la liaison de données:

  • Appelez getText() sur un Resources avec votre ID de ressource de chaîne
  • Transmettez ce CharSequence pour accéder à votre expression de liaison de données

Vous pouvez également envelopper le contenu de votre ressource de chaîne dans CDATA, pour conserver le HTML brut intact. À un moment donné, cependant, vous devrez utiliser Html.fromHtml() ou quelque chose de similaire pour obtenir le CharSequence avec la mise en forme appliquée.

1
CommonsWare 19 juin 2019 à 17:52