Android und in TextView

Lesezeit: 5 Minuten

Benutzer-Avatar
Mikooos

ist es möglich hinzuzufügen   in TextView? Hat jemand eine ähnliche Funktionalität erreicht?

Ich möchte in TextView nicht zerbrechlichen Speicherplatz haben.

Benutzer-Avatar
Dan Färber

TextView respektiert die Unicode-Leerzeichen ohne Umbruch (\u00A0), was eine einfachere/leichtere Lösung als HTML wäre.

  • Das funktioniert super. Sie können das zu XML oder in Java-Code hinzufügen. Funktioniert gut in Java-Code, in XML habe ich nicht viel getestet, aber es sollte den Job machen.

    – Mikooos

    4. Juli 2011 um 7:52 Uhr

  • Weder \u0020 noch \u00A0 funktionieren. Weder durch Setzen in XML (auch nicht in der Vorschau in XML) noch durch Setzen in Java mit setText(). Habe beides mit Android 4.1 und 4.2 probiert

    – Stephan Wiesner

    20. Februar 2013 um 6:08 Uhr

  • Das funktioniert nicht in Verbindung mit Komma. In solchen Fällen erhalten Sie einen Zeilenumbruch direkt nach dem Komma

    – Alex Bonel

    1. Juli 2015 um 13:26 Uhr

  • \u00A0 reicht für mich nicht aus. Es macht kein Leerzeichen, sondern fügt nur die Wörter hinzu – Android 4.4.4, 5.0, 5.1

    – Marcel Bruder

    6. Oktober 2015 um 15:14 Uhr

  • In Kotlin funktioniert es sehr gut. Ich ersetze alle Leerzeichen durch diese, und es wird von den letzten Zeichen weggelassen. str.replace(” “, “\u00A0”) ergibt “Hallo wo…” statt “Hallo…”

    – Seop Yoon

    23. Februar 2018 um 2:27 Uhr


Benutzer-Avatar
TWiStErRob

Es ist möglich zu verwenden   eine lesbare Lösung zu haben. Einschließlich \u00A0 oder   oder  /  im Text vermittelt dem Leser des Quellcodes (oder dem Übersetzer in diesem Fall) nicht wirklich viele Informationen, es sei denn, Sie erinnern sich an die Hex-Codes. Hier ist eine Möglichkeit, die benannte Entität in zu verwenden strings.xml:

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

Dadurch wird die fehlende Deklaration erstellt. Das Original HTML Erklärung finden Sie in https://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent vom Üblichen referenziert XHTML-DTDs. All dies funktioniert, weil der XML-Parser diese liest und beim Laden der Datei ersetzt, sodass die Entität in den resultierenden kompilierten Ressourcen nicht vorhanden ist.

&nbsp; im Android-Text (CharSequence) Ressourcen

<!-- 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"
    />

Gerät und Vorschau (Vorschau erkennt kein HTML)
HTML auf dem Gerät
HTML in der Vorschau

&nbsp; in Android String (formatiert) Ressourcen

<!-- 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"
    />

Dann im Code:

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

Gerät und Vorschau (Vorschau erkennt keine Entitäten und Java-Strings sind wörtlicher Text!)
auf dem Gerät formatiert
in der Vorschau formatiert

Weitere Tricks

Dies sind nur Beispiele für die Verwendung von DTD-Entitäten, verwenden Sie sie nach Ihren eigenen Vorlieben.

<!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>

Beide helfen beim Hervorheben:
Hervorgehobene XML-Entitäten

  • Android übernimmt die Zeichen ganz gut, keine Notwendigkeit, Apostroph-Entitäten zu erstellen. <string name="original">Don’t wrap %1$s</string> funktioniert wie erwartet.

    – Diti

    21. Juli 2016 um 15:02 Uhr


  • @Diti Das ist keine APOSTROPHdas ist ein RECHTES EINFACHES ANFÜHRUNGSZEICHEN; vergleichen ' VS . Android hat keine Probleme mit ausgefalleneren Unicode-Zeichen, aber es hat ein Problem mit ASCII 0x27, das maskiert werden muss. Die Entität ist nur eine Annehmlichkeit, ich habe sie nur dort platziert, um zu demonstrieren, wo sie nützlich sein könnte.

    – TWiStErRob

    21. Juli 2016 um 16:35 Uhr


  • Das ist ausgezeichnet =) Danke. Ich finde das viel sauberer und einfacher zu lesen.

    – Alex Hart

    22. Dezember 2016 um 14:01 Uhr

  • Tolle Antwort, danke! Ich stimme dem zu &nbsp; in den Zeichenfolgen ist für Übersetzer viel aussagekräftiger als der Unicode \u00A0

    – Marc Attinasi

    6. April 2017 um 21:59 Uhr

  • @Seven natürlich, siehe letzten Abschnitt (Weitere Tricks), der hinzufügt con und param1 in derselben Datei.

    – TWiStErRob

    28. November 2018 um 20:07 Uhr

Benutzer-Avatar
Brenagwynn

\u00A0 ist ein geschütztes Leerzeichen, \u0020 ist kein geschütztes Leerzeichen

Die TextView sollte das geschützte Leerzeichen berücksichtigen

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

oder

new TextView("Hello\u00A0world");

Eine einzigartige Situation, auf die ich gestoßen bin, war das Hinzufügen eines geschützten Leerzeichens zu einer Zeichenfolgenressource, die benötigt wurde String.format Parameter.

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

Ich habe versucht, das geschützte Leerzeichen einfach zu kopieren und in die Zeichenfolge einzufügen, und es wurde nach dem Kompilieren durch ein normales altes Leerzeichen ersetzt.

Entferne den formatiert = “false”die Nummerierung der Formatargumente und die Verwendung der Backslash-Notation hat bei mir funktioniert:

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

Benutzer-Avatar
Kunstplastik

Das hat bei mir funktioniert:

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

Dies ist ein Beispiel für die Verwendung von nbsp in einer TextView

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

  • Das sollte \u00A0 sein

    – Poitroae

    26. März 2014 um 19:07 Uhr

1334570cookie-checkAndroid und in TextView

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy