studio - textview layout android
Android y & nbsp; en TextView (7)
El TextView debe respetar el espacio sin interrupciones
<string name="test">Hello world</string>
o
new TextView("Hello/u00A0world");
es posible agregar
en TextView? ¿Alguien ha logrado una funcionalidad similar?
Quiero tener espacio no rompible en TextView.
Este es un ejemplo que usa nbsp en un TextView
<string name="text">Example:/u00A0</string>
Esto funcionó para mí:
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);
}
No he intentado esto para asegurarme de que realmente funciona, pero en un mundo ideal, TextView
debe respetar el carácter de espacio no-break de Unicode ( /u00A0
), que sería una solución más simple / ligera que HTML.
Una situación única con la que me encontré fue agregar un espacio no String.format
a un recurso de cadena que tomaba los parámetros de String.format
.
<resources>
<string name="answer_progress" formatted="false">Answered %d of %d</string>
</resources>
Traté de simplemente copiar y pasar el carácter de espacio sin interrupción en la cadena y fue reemplazado por un espacio antiguo normal después de la compilación.
Eliminar el formato = "falso" , numerar los args de formato y usar la notación de barra invertida funcionó para mí:
<resources>
<string name="answer_progress">Answered %1$d/u00A0of/u00A0%2$d</string>
</resources>
/u00A0
es un espacio sin interrupciones, /u0020
no es un espacio sin interrupciones
Es posible usar
tener una solución legible Incluyendo /u00A0
o  
o  
/  
en el texto realmente no transmite mucha información al lector del código fuente (o traductor para el caso), a menos que recuerde los códigos hexadecimales. Aquí hay una manera de usar la entidad nombrada en strings.xml
:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE resources [
<!ENTITY nbsp " "><!-- non-breaking space, U+00A0 -->
]>
<resources>
...
</resources>
Esto creará la declaración faltante. La declaración HTML original se puede encontrar en https://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent partir de las DTD XHTML usuales. Todo esto funciona, porque el analizador XML lee estos y los sustitutos mientras carga el archivo, por lo que la entidad no estará presente en los recursos compilados resultantes.
en recursos de Android Text ( CharSequence
)
<!-- 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"
/>
Dispositivo y vista previa (la vista previa no reconoce HTML)
en recursos de cadena de Android (formateados)
<!-- 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"
/>
Luego en el código:
String contents = getString(R.string.formatted_text, "Using an ");
((TextView)view.findViewById(android.R.id.text1)).setText(contents);
Dispositivo y vista previa (¡la vista previa no reconoce las entidades y las cadenas de Java son texto literal!)
Otros trucos
Estos son solo ejemplos de uso de entidades DTD, úselas según su preferencia.
<!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>