Android et   dans TextView


74

est-il possible d'ajouter   dans TextView? Quelqu'un at-il réalisé une fonctionnalité similaire? Je veux avoir de l'espace non-séparable dans TextView.

137

Je n'ai pas essayé de faire en sorte que cela ne fait le travail, mais dans un monde idéal TextView doit respecter les Unicode no-break space character (\u00A0), ce qui serait une solution plus simple/plus léger que HTML.

+3

Cela fonctionne très bien. Vous pouvez l'ajouter au code xml ou java. Fonctionne bien dans le code java, en xml je n'ai pas testé beaucoup, mais ça devrait faire l'affaire. 04 juil.. 112011-07-04 07:52:17

  0

Ni \ u0020 ni \ u00A0 ne fonctionnent. Ni en les paramétrant en XML (pas même dans l'aperçu en XML) ni en les paramétrant en Java avec setText(). Je ai essayé à la fois avec Android 4.1 et 4.2 20 févr.. 132013-02-20 06:08:43

  0

\ u00A0 travaillé pour moi sur Nexus 4 avec Android 4.4 en l'utilisant dans strings.xml 04 déc.. 132013-12-04 08:24:39

  0

\ u00A0 fonctionne bien pour moi de API-8 à API-19. Exemple d'utilisation: <string name = "Today"> Today \ u00A0</string> 09 déc.. 132013-12-09 15:59:49

+1

Cela ne fonctionne pas avec une virgule. Dans ce cas, vous obtenez un saut de ligne juste après la virgule 01 juil.. 152015-07-01 13:26:58

+1

\ u00A0 ne fait pas l'affaire pour moi. Il ne fait pas un espace, juste joint les mots - Android 4.4.4, 5.0, 5.1 06 oct.. 152015-10-06 15:14:21

  0

'&#160;' est un espace pour android. trop tard peut-être 16 sept.. 162016-09-16 08:56:47

  0

A Kotlin, ça marche très bien. Je remplace tous les espaces vides par ceci, et il s'illustrera des derniers caractères. str.replace ("", "\ u00A0") cède, "Hello wor ..." au lieu de "Hello ..." 23 févr.. 182018-02-23 02:27:09


0

Voici un exemple que l'utilisation nbsp dans un TextView

<string name="text">Example:\u00A0</string>

+4

Cela devrait être \ u00A0 26 mars. 142014-03-26 19:07:53


16

\u00A0 est un espace insécable, \u0020 n'est pas un espace insécable


14

Le TextView doit respecter la insécable espace

<string name="test">Hello&#160;world</string> 

ou


1

Une situation unique que j'ai rencontrée consistait à ajouter un espace insécable à une ressource de chaîne qui prenait des paramètres String.format.

<resources> 
    <string name="answer_progress" formatted="false">Answered %d of %d</string> 
</resources> 

J'ai essayé de copier simplement et passé le caractère espace insécable dans la chaîne et il a été remplacé par un espace régulier après la compilation de vieux.

Retrait de la formatée = "false", au nombre le format args et en utilisant la notation backslash a fonctionné pour moi:

<resources> 
    <string name="answer_progress">Answered %1$d\u00A0of\u00A0%2$d</string> 
</resources> 

10

Il est possible d'utiliser &nbsp; d'avoir une solution lisible. Y compris \u00A0 ou &#160; ou &#xa0;/&#x00a0; 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 une façon d'utiliser l'entité nommée dans strings.xml:

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE resources [ 
    <!ENTITY nbsp "&#160;"><!-- non-breaking space, U+00A0 --> 
]> 
<resources> 
    ... 
</resources> 

Cela va créer la déclaration manquante. La déclaration originale HTML peut être trouvée dans https://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent référencée à partir de XHTML DTDs d'habitude. Tout ceci fonctionne, car l'analyseur XML lit ces variables et les substitue lors du chargement du fichier, de sorte que l'entité ne sera pas présente dans les ressources compilées résultantes.

&nbsp; dans le texte Android (CharSequence) Ressources

<!-- Defined in <resources> --> 
<string name="html_text">Don\'t break <b>this&nbsp;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" 
    /> 

appareil et aperçu (preview ne reconnaît pas le HTML)
HTML on device HTML in preview

&nbsp; dans Android String (format) Ressources

<!-- Defined in <resources> --> 
<string name="formatted_text">%1$s is&nbsp;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 le code:

String contents = getString(R.string.formatted_text, "Using an &nbsp;"); 
((TextView)view.findViewById(android.R.id.text1)).setText(contents); 

appareil et aperçu (! Aperçu ne reconnaît pas les entités et les chaînes Java sont un texte littéral)
formatted on device formatted in preview

astuces D'autres

Ce sont juste exemple utilisations des entités DTD, utilisez-la en fonction de vos propres préférences.

<!ENTITY con "\&apos;"><!-- contraction, otherwise error: "Apostrophe not preceded by \" 
          Sadly &apos; cannot be overridden due to XML spec: 
          https://www.w3.org/TR/xml/#sec-predefined-ent --> 
<!ENTITY param1 "&#37;1$s"><!-- format string argument #1 --> 

<string name="original">Don\'t wrap %1$s</string> 
<string name="with_entities">Don&con;t wrap &param1;</string> 

deux les aider en soulignant: highlighted XML entities

  0

Android gère le caractère '' 'très bien, pas besoin de créer entités apostrophe. '<string name =" original "> N'enveloppe pas% 1 $ s</string>' fonctionne comme prévu. 21 juil.. 162016-07-21 15:02:59

+1

@Diti Ce n'est pas un [APOSTROPHE] (http://www.fileformat.info/info/unicode/char/0027/index.htm), c'est un [VERITABLE GUIDE DE COTATION UNIQUE] (http: //www.fileformat. info/info/unicode/char/2019/index.htm); comparez '' 'VS' ''. Android n'a pas de problèmes avec des caractères Unicode plus fantaisistes, mais il a un problème avec ASCII 0x27, qui doit s'échapper. L'entité est juste une commodité, je l'ai juste mis là pour démontrer où cela pourrait être utile. 21 juil.. 162016-07-21 16:35:21

  0

C'est excellent =) Merci. Je trouve cela beaucoup plus propre et plus facile à lire. 22 déc.. 162016-12-22 14:01:17

  0

Bonne réponse, merci! Je suis d'accord qu'ayant '&nbsp;' dans les chaînes est beaucoup plus significatif pour les traducteurs que l'unicode '\ u00A0' 06 avril. 172017-04-06 21:59:14


0

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); 
}