In Android wird ein String tiefgestellt und hochgestellt

104

Wie können Sie eine Zeichenfolge mit einem tiefgestellten oder hochgestellten Index drucken? Können Sie dies ohne eine externe Bibliothek tun? Ich möchte, dass dies in einem TextViewin Android angezeigt wird .

Mohit Deshpande
quelle
Verwenden Sie den Trick [this] [1] in der Listenansicht und ihrer Textansicht. [1]: stackoverflow.com/a/22105902/1350021
Omid Omidi

Antworten:

159
((TextView)findViewById(R.id.text)).setText(Html.fromHtml("X<sup>2</sup>"));

oder

Allgemeine Aufgaben und deren Ausführung in Android

Konstantin Burov
quelle
3
Es unterstützt technisch gesehen kein HTML, dh es erstellt ein Spanned, das von TextViews unterstützt wird. Im Wesentlichen CharSequences mit Stilinformationen.
Dandre Allison
1
Das funktioniert bei mir nicht ... aber vielleicht liegt es daran, dass ich es in meiner Datei strings.xml festgelegt habe. Es abonniert es für mich, aber es schneidet es ab und egal wie viel Polsterung ich stecke, es ist immer abgeschnitten.
JPM
Ist das Parsen dieses HTML nicht wahnsinnig teuer?
A. Steenbergen
10
Der Link in der Antwort scheint nicht mehr relevant zu sein.
Pang
3
Vielen Dank dafür, aber die Antwort unten mit einem SpannableStringBuilder ist viel besser.
Zach Sperske
105

Beispiel:

equation = (TextView) findViewById(R.id.textView1);
SpannableStringBuilder cs = new SpannableStringBuilder("X3 + X2");
cs.setSpan(new SuperscriptSpan(), 1, 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
cs.setSpan(new RelativeSizeSpan(0.75f), 1, 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
cs.setSpan(new SuperscriptSpan(), 6, 7, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
cs.setSpan(new RelativeSizeSpan(0.75f), 6, 7, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
equation.setText(cs);
Peter
quelle
1
Das sieht tatsächlich richtig aus, danke fürs Teilen! Die Methode Html.fromHTML () ist praktisch, aber der hochgestellte Index ist nicht kleiner.
Daniel Schuler
Das ist viel besser! Die Methode Html.fromHtml kann dazu führen, dass der hochgestellte Text abgeschnitten wird.
Zach Sperske
Wenn ich diese Methode verwende, möchte ich sagen, dass 100 Quadratmeter equation.setText(blah+cs);nicht funktionieren. Funktioniert aber separat gut. Wie bekomme ich diese Arbeit?
Niemand
Weitaus besser als die Html.fromHtml () -Methode
wissenschaftlich
Bitte Erklärung hinzufügen
Aryeetey Solomon Aryeetey
48

Für alle Leute, die fragen, ob Sie es kleiner machen möchten, als Super oder Index zu machen, müssen Sie nur ein Tag hinzufügen. EX:

"X <sup><small> 2 </small></sup>"
Ariel Capozzoli
quelle
14

In den Code setzen Sie einfach dieses "\ u00B2" wie folgt:

textView.setText("X\u00B2");

Gerardo Salazar Sánchez
quelle
Hallo, deine Antwort war sehr hilfreich. Welcher Code kann jedoch für den Index verwendet werden? Wie heißen diese Codes, wenn ich sie google? Sind sie Unicodes?
Kolaaa
Hallo, ja ist Unicode, hier ein PDF mit allen Unicodes unicode.org/charts/PDF/U2070.pdf
Gerardo Salazar Sánchez
Vielen Dank. Sehr einfach.
Izak
11

Wenn Sie den hochgestellten Code aus der Datei string.xml festlegen möchten, versuchen Sie Folgendes:

Zeichenfolgenressource:

<string name="test_string">X&lt;sup&gt;3&lt;/sup&gt;</string>

Wenn der hochgestellte Index kleiner sein soll:

<string name="test_string">X&lt;sup&gt;&lt;small&gt;3&lt;/small&gt;&lt;/sup&gt;</string>

Code:

textView.setText(Html.fromHtml("Anything you want to put here"+getString(R.string.test_string)));
César Cobo
quelle
11

Es ist etwas spät, aber nachdem es gut funktioniert hat, verwenden Sie hochgestellt als Sonderzeichen. Ich habe hier ein räumliches Zeichen verwendet.

<string name="str">H₂</string>
Code
quelle
10
((TextView)findViewById(R.id.text)).setText(Html.fromHtml("X<sup><small>2</small></sup>")); 

(oder) Aus der String-Ressourcendatei:

<string name="test_string">
  <![CDATA[ X<sup><small>2</small></sup> ]]>
</string>
mvnkalyani
quelle
Ich bin neu, um über den Fluss zu stapeln, zu der Zeit weiß nicht, wie man verwendet.
mvnkalyani
8

Die akzeptierte Antwort ist jetzt veraltet. Bitte gehen Sie diesen Code durch. Ich habe das von einer Website bekommen. Ich habe den Namen vergessen, aber trotzdem danke für diesen guten Arbeitscode.

     SpannableString styledString
            = new SpannableString("Large\n\n"     // index 0 - 5
            + "Bold\n\n"          // index 7 - 11
            + "Underlined\n\n"    // index 13 - 23
            + "Italic\n\n"        // index 25 - 31
            + "Strikethrough\n\n" // index 33 - 46
            + "Colored\n\n"       // index 48 - 55
            + "Highlighted\n\n"   // index 57 - 68
            + "K Superscript\n\n" // "Superscript" index 72 - 83 
            + "K Subscript\n\n"   // "Subscript" index 87 - 96
            + "Url\n\n"           //  index 98 - 101
            + "Clickable\n\n");   // index 103 - 112

    // make the text twice as large
    styledString.setSpan(new RelativeSizeSpan(2f), 0, 5, 0);

    // make text bold
    styledString.setSpan(new StyleSpan(Typeface.BOLD), 7, 11, 0);

    // underline text
    styledString.setSpan(new UnderlineSpan(), 13, 23, 0);

    // make text italic
    styledString.setSpan(new StyleSpan(Typeface.ITALIC), 25, 31, 0);

    styledString.setSpan(new StrikethroughSpan(), 33, 46, 0);

    // change text color
    styledString.setSpan(new ForegroundColorSpan(Color.GREEN), 48, 55, 0);

    // highlight text
    styledString.setSpan(new BackgroundColorSpan(Color.CYAN), 57, 68, 0);

    // superscript
    styledString.setSpan(new SuperscriptSpan(), 72, 83, 0);
    // make the superscript text smaller
    styledString.setSpan(new RelativeSizeSpan(0.5f), 72, 83, 0);

    // subscript
    styledString.setSpan(new SubscriptSpan(), 87, 96, 0);
    // make the subscript text smaller
    styledString.setSpan(new RelativeSizeSpan(0.5f), 87, 96, 0);

    // url
    styledString.setSpan(new URLSpan("http://www.google.com"), 98, 101, 0);

    // clickable text
    ClickableSpan clickableSpan = new ClickableSpan() {

        @Override
        public void onClick(View widget) {
            // We display a Toast. You could do anything you want here.
            Toast.makeText(MainActivity.this, "Clicked", Toast.LENGTH_SHORT).show();

        }
    };

    styledString.setSpan(clickableSpan, 103, 112, 0);


    // Give the styled string to a TextView
    spantext = (TextView) findViewById(R.id.spantext);


    // this step is mandated for the url and clickable styles.
    spantext.setMovementMethod(LinkMovementMethod.getInstance());

    // make it neat
    spantext.setGravity(Gravity.CENTER);
    spantext.setBackgroundColor(Color.WHITE);

    spantext.setText(styledString);

Hinweis:android:textAllCaps="false" Geben Sie immer Ihren Spantext ein.

AMAN SINGH
quelle
4

Die HTML.fromHTML (Zeichenfolge) war ab API 24 veraltet. Sie sagen, dass stattdessen diese verwendet werden soll, die Flags als Parameter unterstützt. Um von der akzeptierten Antwort abzuweichen:

TextView textView = ((TextView)findViewById(R.id.text));
textView.setText(Html.fromHtml("X<sup>2</sup>", Html.FROM_HTML_MODE_LEGACY));

Und wenn Sie Code wünschen, der auch APIs vor 24 berücksichtigt:

TextView textView = ((TextView)findViewById(R.id.text));
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
  textView.setText(Html.fromHtml("X<sup>2</sup>", Html.FROM_HTML_MODE_LEGACY));
} else {
    textView.setText(Html.fromHtml("X<sup>2</sup>"));    
}

Diese Antwort wurde abgeleitet von: https://stackoverflow.com/a/37905107/4998704

Die Flags und andere Dokumentationen finden Sie hier: https://developer.android.com/reference/android/text/Html.html

Justin Liu
quelle
3

Ich habe diesen Artikel über die Verwendung einer Spannableoder in einer String-Ressourcendatei gefunden: <sup>oder <sub>für hochgestellte bzw. tiefgestellte Zeichen.

Mohit Deshpande
quelle
6
Der Link in der Antwort scheint nicht mehr relevant zu sein.
Pang
0

In den strings.xmlDateien können Sie einfach das HTML- <sup>3</sup>Tag verwenden. Arbeite perfekt für mich

BEISPIEL

<string name="turnoverRate">Turnover rate m<sup>3</sup>/m<sup>2</sup>/hour:</string>
Detilium
quelle
0

Android String Resource Hochgestellt und Tiefgestellt für Buchstaben

Sie müssen kein HTML-Dokument verwenden, wenn einer der gewünschten Buchstaben hier dargestellt wird

Für "a" kopieren Sie dieses "ᵃ" und fügen Sie es ein.

Sie können diese hochgestellten und tiefgestellten Zeichen direkt in Ihre Android-String-Ressource kopieren und einfügen.

Beispiel:

    <string name="word_with_superscript" translatable="false">Trademark ᵀᴹ</string>

Ergebnis: Marke ᵀᴹ

Hochgestellte und tiefgestellte Buchstaben

Hochgestellte Hauptstadt ᴬ ᴮ ᴰ ᴱ ᴳ ᴴ ᴵ ᴶⱽ ᵂ

Hochgestellte Minuskel ᵃ ᵇ ᶜ ᵈ ᵉ ᶠ ᵍ ʰ

Subscript Minuskel ₐ ₑ ₕ ᵢ ⱼ ₖ ₗ ₘ ₙ ₒ ₚ ᵣ ₛ

JEREMIAH SYLVESTER
quelle
-1
yourTextView.setText(Html.fromHtml("X<sup>2</sup>"));

This will be the result in you yourTextView =

X 2

ン ド リ ュ ー ー ラ ア ア ン
quelle