Android et dans TextView
Est-il possible d'ajouter
dans TextView? Quelqu'un at-il atteint des fonctionnalités similaires?
Je veux avoir un espace non cassable dans TextView.
7 réponses
\u00A0
est un espace insécable, \u0020
n'est pas un espace insécable
Le TextView doit respecter l'espace non cassant
<string name="test">Hello world</string>
Ou
new TextView("Hello\u00A0world");
Il est possible d'utiliser
pour avoir lisible une solution. y compris \u00A0
ou  
ou  
/ 
dans le texte ne transmet pas vraiment beaucoup d'informations au lecteur du code source (ou Traducteur d'ailleurs), sauf si vous vous souvenez des codes hexadécimaux. Voici un moyen d'utiliser l'entité nommée dans strings.xml
:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE resources [
<!ENTITY nbsp " "><!-- non-breaking space, U+00A0 -->
]>
<resources>
...
</resources>
Cela créera la déclaration manquante. La déclaration originale HTML se trouve dans https://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent référencé à partir de l'habituel XHTML DTD . Tout cela fonctionne, car L'analyseur XML les lit et les remplace lors du chargement du fichier, de sorte que l'entité ne sera pas présente dans les ressources compilées résultantes.
dans le texte Android (CharSequence
) ressources
<!-- Defined in <resources> -->
<string name="html_text">Don\'t break <b>this name</b></string>
<!-- Used in a layout -->
<TextView
android:layout_width="130dp"
android:layout_height="wrap_content"
android:background="#10000000"
android:text="@string/html_text"
/>
Périphérique et aperçu (aperçu ne reconnaît pas HTML)
{[5] } Dans Android String (formaté) ressources
<!-- Defined in <resources> -->
<string name="formatted_text">%1$s is nice</string>
<!-- Used in a layout -->
<TextView
android:layout_width="130dp"
android:layout_height="wrap_content"
android:background="#10000000"
tools:text="@string/formatted_text"
/>
Puis dans code:
String contents = getString(R.string.formatted_text, "Using an ");
((TextView)view.findViewById(android.R.id.text1)).setText(contents);
Périphérique et aperçu (aperçu ne reconnaît pas les entités et les chaînes Java sont du texte littéral!)
Autres astuces
Ce ne sont que des exemples d'utilisations d'entités DTD, utilisez-le en fonction de vos propres préférences.
<!ENTITY con "\'"><!-- contraction, otherwise error: "Apostrophe not preceded by \"
Sadly ' cannot be overridden due to XML spec:
https://www.w3.org/TR/xml/#sec-predefined-ent -->
<!ENTITY param1 "%1$s"><!-- format string argument #1 -->
<string name="original">Don\'t wrap %1$s</string>
<string name="with_entities">Don&con;t wrap ¶m1;</string>
Ceci est un exemple d'utilisation de nbsp dans un TextView
<string name="text">Example:\u00A0</string>
Une situation unique que j'ai rencontrée a été l'ajout d'un espace insécable à une ressource de chaîne qui a pris des paramètres String.format
.
<resources>
<string name="answer_progress" formatted="false">Answered %d of %d</string>
</resources>
J'ai essayé de simplement copier et dépasser le caractère d'espace non-breaking dans la chaîne et il a été remplacé par un ancien espace régulier après la compilation.
Supprimer le formatted = "false" , numéroter les args de format et utiliser la notation antislash a fonctionné pour moi:
<resources>
<string name="answer_progress">Answered %1$d\u00A0of\u00A0%2$d</string>
</resources>
Cela a fonctionné pour moi:
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
textview.setText(Html.fromHtml(your string, Html.FROM_HTML_MODE_LEGACY));
} else {
textview.setText(Html.fromHtml(your string);
}