Frage

Die Android Textview-Clips aus meinem Text Indizes (siehe Bild unten), auch wenn ich android:layout_height="wrap_content" für die Textview verwenden. Gibt es eine Fix / Work-around für das?

P / S: Hochstellen funktionieren

Hinweis: padding nicht funktioniert.

  • Ich habe versucht, auch das Hinzufügen einer Polsterung von 50dip , aber es hat nicht geholfen.
  • Ich kann eine absolute Höhe verwenden wie 50dip , aber das Verwirrungen alles, wenn ich Text muss umwickeln.

Beispielcode:

mtTextView.setText(Html.fromHtml("HC0<sub>3</sub>"));

War es hilfreich?

Lösung

Diese Lösung für mich gearbeitet.

Hochgestellte Text ist in der Regel kleiner gemacht, wenn der Browser es macht, die hier nicht zu passieren scheint so, dass Sie replizieren können (und lösen dieses Problem), indem Sie diese:

someTextView.setText(Html.fromHtml("Some text<sup><small>1</small></sup>"));

Andere Tipps

vorschlagen meisten Antworten Polsterungen hinzuzufügen oder kleiner zu verwenden sub / Indizes. Diese könnten zu wartenden Abhilfen sein, aber sie haben nicht wirklich das Problem lösen. Idealerweise möchten wir Android die sub / Exponent berücksichtigen, wenn die Zeilenhöhe zu berechnen. Ich glaube, ich fand, wie es zu tun, und ich bin es für Menschen teilen dieses Problem googeln.

    SpannableStringBuilder sb = new SpannableStringBuilder("X2");
    sb.setSpan(new SuperscriptSpan(), 1, 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    textView.setText(sb, BufferType.SPANNABLE);

Der Trick ist, in BufferType.SPANNABLE. Anscheinend macht es Textview Lohn mehr Aufmerksamkeit auf die Markup und berechnen Zeilenhöhen richtig.

Für Index eine leichte Variation der obigen Vorschlag ist erforderlich, zwei kleine tags:

    textView.setText(Html.fromHtml(
        "HCO<sub><small><small>3</small></small></sub>));

Android: lineSpacingExtra = "4DP" sollte es lösen dies wird unter Ihrem Text zusätzlichen Zeilenabstand hinzuzufügen und Index von Cutoff bekommen. Ich habe es nicht mit Exponenten versucht, so ist es jetzt, dass beheben könnte.

Ich hatte das gleiche Problem, so dass nach der Beiträge zu lesen, fand ich diese zu arbeiten.

Beispiel: H 2 O
einfach nutzen:

textView.setText(Html.fromHtml("H<sub>2</sub>O"),BufferType.SPANNABLE);

BufferType.SPANNABLE ist wichtig, da es Textview sagt die hochgestellte Spanne zu berücksichtigen.

Wenn Sie benutzerdefinierte Tag-Handler für HTML verwenden, können Sie es auch wie folgt verwenden:

 textView.setText(Html.fromHtml(data, null, new CustomHtmlTagHandler(),BufferType.SPANNABLE);

Hope hilft es jemand für gleiches Problem suchen.

Ich bin die Anzeige Fraktionen und gemischte Zahlen so dass ich beide Super bin mit und Indizierung zusammen. Die Html.fromHtml hat für mich keine Arbeit, es entweder die obere oder die untere abgeschnitten.

Merkwürdig ist, arbeitete gemischte Zahlen korrekt, aber Brüche selbst nicht.

Ich landete mit einem SpannableString mit einem SubscriptSpan oder einem SuperscriptSpan, dann die Schriftgröße in einem TextAppearanceSpan Einstellung.

Nachdem ich getan hatte, dass ich die Höhe des Textview als auch erweitern musste.

TextView number = (TextView)findViewById(R.id.number);
String temp = "1 1/2";
SpannableString s = new SpannableString(temp);
// if the string has a fraction in it, superscript the numerator and subscript the denominator
if (temp.indexOf('/') != -1)
{
    int len = temp.length();
    s.setSpan(new SuperscriptSpan(), len - 3, len - 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    s.setSpan(new TextAppearanceSpan(null, 0, fractionFontSize, null, null), len - 3, len - 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    s.setSpan(new TextAppearanceSpan(null, 0, fractionFontSize, null, null), len - 2, len - 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    s.setSpan(new SubscriptSpan(), len - 1, len, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    s.setSpan(new TextAppearanceSpan(null, 0, fractionFontSize, null, null), len - 1, len, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
number.setText(s);

Dann hatte ich die Höhe erweitern:

RelativeLayout.LayoutParams parms = (RelativeLayout.LayoutParams)number.getLayoutParams();
Rect frame = CalcSize(number.getTextSize(), quantityMaxString);
parms.height = frame.height() + fractionAdjustment;
number.setLayoutParams(parms);

CalcSize gibt ein Begrenzungsrechteck des größten Zeichenfolge in dem Array von Anzeigeelementen.

fractionAdjustment ist ein empirisch gewählter Wert, dass die Arbeiten für die gewählte Schriftgröße für Siebgeometrie eingestellt.

. Hinweis: Dies ist in einem Textview Listview, so dass vielleicht einige Auswirkungen auch hat

// calculate the field dimensions, given the font size and longest string
private static Rect CalcSize(float fontSize, String maxString)
{
    Rect bounds = new Rect();
    paint.setTypeface(Typeface.DEFAULT);
    paint.setTextSize(fontSize);

    paint.getTextBounds(maxString, 0, maxString.length(), bounds);

    return bounds;
}

Erfahrungswerte:

fractionAdjustment = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 14, resources.getDisplayMetrics());
fractionFontSize = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 11, resources.getDisplayMetrics());

Ich habe das gleiche Problem in ICS und unter Android Versionen konfrontiert. Ich reparierte das Problem durch einen einfachen Schritt

Geben Sie eine Mindesthöhe der Textansicht. Es wird das Problem beheben.

Sie können Mindesthöhe durch xml gesetzt.

        android:minHeight="30dp"

oder dynamisch

 if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN) {

            tv.setMinHeight(52);
    }

Das ist für mich arbeitet zusammen mit dem Kleine Tag.

  1. Innerhalb der Textview Add
  

Android: paddingBottom = "1 dp"

  1. Verwenden Sie den kleinen Tag nach dem Index
  

yourTextView.setText (Html.fromHtml ( "" + "Hey 2 "));

Hinweis Bitte beachten Sie, Schritt 1 ist wichtig, Mein Text noch schneidet in einigen Fällen nach unten, mit paddingBottom beschlossen. Vergessen Sie nicht, die Räume in Unter und kleinen Tags zu entfernen, die in meiner Antwort vorhanden sind :)

Die Mehr Anzahl von -Tags da drin ist, desto kleiner der Index erhalten und Sie sollen sie in der Lage sein zu sehen, ohne abgeschnitten zu werden.

Eg: H 2 O

Html.fromHtml("H<sub><small><small><small>2</small></small></small></sub>O");
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top