java - Tiefstellen und Hochstellen einer Zeichenfolge in Android



string superscript subscript (12)

Wie können Sie eine Zeichenfolge mit einem Index oder einem Hochzeichen drucken? Können Sie dies ohne eine externe Bibliothek tun? Ich möchte, dass dies in einem TextView in Android TextView .


Answers

Im Code einfach dieses "\ u00B2" setzen

textView.setText("X\u00B2");


Wenn Sie die hochgestellte Datei string.xml setzen möchten, versuchen Sie Folgendes:

Zeichenfolge-Ressource:

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

Wenn Sie möchten, dass der hochgestellte Wert kleiner ist:

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

Ich fand this Artikel über die Verwendung einer Spannable oder in einer String-Ressource-Datei: <sup> oder <sub> für hochgestellte bzw. tiefgestellte.


Die akzeptierte Antwort ist jetzt veraltet. Also bitte gehen Sie durch dieses Stück Code. Ich habe das von einer Website bekommen. Ich habe den Namen vergessen, aber danke für dieses gute Stück Code.

     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" Sie immer android:textAllCaps="false" von Ihrem Pantext.


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

(oder) Von String-Ressourcendatei:

<string name="test_string">
  <![CDATA[ X<sup><small>2</small></sup> ]]>
</string>

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

BEISPIEL

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


Die HTML.fromHTML (String) war ab API 24 veraltet. Sie sagen stattdessen, dass diese verwendet werden soll, die Flags als Parameter unterstützt. Um von der angenommenen 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 möchten, der auch vor 24 APIs 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://.com/a/37905107/4998704

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


Um alle Leute zu fragen, ob du es kleiner machen willst außer Super oder Subscript, du musst nur ein Tag hinzufügen. EX:

"X <sup><small> 2 </small></sup>"

yourTextView.setText(Html.fromHtml("X<sup>2</sup>"));

This will be the result in you yourTextView =

X 2


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

Die Antwort wurde bereits gegeben, aber ich möchte ein Thema teilen, das ich kürzlich mit Java-Standardbibliotheken entdeckt habe. Während sie jetzt mit großer Sorgfalt darauf achten, Passwortzeichenfolgen überall durch char[] ersetzen (was natürlich eine gute Sache ist), scheinen andere sicherheitskritische Daten übersehen zu werden, wenn sie aus dem Speicher gelöscht werden.

Ich denke an zB die PrivateKey Klasse. Stellen Sie sich ein Szenario vor, in dem Sie einen privaten RSA-Schlüssel aus einer PKCS # 12-Datei laden und diesen verwenden, um einen Vorgang auszuführen. In diesem Fall würde das Sniffing des Kennworts allein nicht viel helfen, solange der physische Zugriff auf die Schlüsseldatei ordnungsgemäß eingeschränkt ist. Als Angreifer wäre es viel besser, wenn Sie den Schlüssel direkt anstelle des Kennworts erhalten. Die gewünschten Informationen können durchgesickert sein, Kerndumps, eine Debugger-Sitzung oder Auslagerungsdateien sind nur einige Beispiele.

Wie sich herausstellt, können Sie die privaten Informationen eines PrivateKey aus dem Speicher PrivateKey , da es keine API gibt, mit der Sie die Bytes PrivateKey aus denen die entsprechenden Informationen bestehen.

Dies ist eine schlechte Situation, da in diesem paper beschrieben wird, wie dieser Umstand potenziell ausgenutzt werden kann.

Die OpenSSL-Bibliothek beispielsweise überschreibt kritische Speicherbereiche, bevor private Schlüssel freigegeben werden. Da Java nicht mehr vorhanden ist, benötigen wir explizite Methoden, um private Informationen für Java-Schlüssel zu löschen und für ungültig zu erklären, die unmittelbar nach der Verwendung des Schlüssels angewendet werden müssen.





java android string superscript subscript