Domanda

Android TextView ritaglia i miei pedici di testo (vedi immagine sotto) anche quando lo utilizzo android:layout_height="wrap_content" per TextView.Esiste una soluzione/soluzione alternativa per questo?

alt text

P/S:Gli apici funzionano bene

Nota: l'imbottitura non funziona.

  • Ho provato anche ad aggiungere un'imbottitura di 50dip ma non è servito a nulla.
  • Posso usare un'altezza assoluta come 50dip ma questo incasina tutto quando ho bisogno del testo da avvolgere.

Codice d'esempio:

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

È stato utile?

Soluzione

Questa soluzione ha funzionato per me.

testo in apice di solito è fatta più piccola quando il browser rende, che non sembra accadere qui in modo da poter replicare quel (e risolvere questo problema) in questo modo:

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

Altri suggerimenti

La maggior parte delle risposte suggeriscono di aggiungere imbottiture o per utilizzare più piccoli sub / apici. Questi potrebbero essere soluzioni alternative riparabili, ma in realtà non risolvere il problema. Idealmente, vogliamo Android per prendere il sub / apice in considerazione nel calcolo altezza della linea. Credo di aver trovato come farlo, e sto condividendo per le persone googling questo problema.

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

Il trucco sta nel BufferType.SPANNABLE. A quanto pare rende TextView prestare maggiore attenzione alla marcatura e calcolare le altezze di linea correttamente.

Per pedice è necessaria una leggera variazione per il suggerimento di cui sopra, due piccoli tag:

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

Android: lineSpacingExtra = "4DP" dovrebbe risolverlo questo aggiungerà interlinea in eccesso sotto il testo, e mantenere pedice di ottenere cutoff. Non ho provato con apice quindi potrebbe ora sistemare le cose.

Ho avuto lo stesso problema, quindi dopo aver letto i post, ho trovato questo per essere al lavoro.

Esempio: H 2 O
utilizzare semplicemente:

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

BufferType.SPANNABLE è importante in quanto vi dirà TextView di prendere in considerazione la durata apice.

Se si utilizza tag handler personalizzato per HTML è anche possibile utilizzare in questo modo:

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

Speranza che aiuta chi cerca stessa problema.

Sono la visualizzazione di frazioni e numeri misti quindi sto utilizzando sia super e l'indicizzazione di insieme. Il Html.fromHtml non ha funzionato per me, sia tagliata la parte superiore o inferiore.

Stranamente, numeri misti funzionava correttamente, ma le frazioni da soli non hanno fatto.

Ho finito per usare uno SpannableString con un SubscriptSpan o un SuperscriptSpan, quindi impostando la dimensione del carattere in un TextAppearanceSpan.

Una volta che avevo fatto che ho dovuto ampliare l'altezza del TextView pure.

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

Poi ho dovuto ampliare l'altezza:

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

calcsize restituisce un rettangolo della grande stringa nella matrice di elementi di visualizzazione.

fractionAdjustment è un valore emperically selezionato che lavora per la dimensione del carattere selezionato regolato per la geometria dello schermo.

. Nota: Questa è TextView è all'interno di un ListView, in modo che possa avere un certo impatto, nonché

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

I valori empirici:

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

ho affrontato lo stesso problema in ICS e sotto le versioni di Android. Ho risolto il problema con un semplice passo

Dare un'altezza minima al testo View. Si risolverà il problema.

È possibile impostare l'altezza minima tramite XML.

        android:minHeight="30dp"

o dinamicamente

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

            tv.setMinHeight(52);
    }

Questo ha funzionato per me insieme a Piccolo etichetta.

  1. All'interno del TextView add

android:paddingBottom="1dp"

  1. Utilizzare il piccolo tag dopo il pedice

yourTextView.setText(Html.fromHtml("" +" Ciao< sub >< small >2< /small > < /sub >"));

Nota Tieni presente che il passaggio 1 è importante, in alcuni casi il mio testo veniva ancora ridotto, utilizzando il riempimentoBottom il problema è stato risolto.Non dimenticare di rimuovere gli spazi nei sub e nei tag piccoli presenti nella mia risposta :)

Il Più il numero di tag in là, il più piccolo è il pedice otterrà e si dovrebbe essere in grado di vedere senza essere ritagliato.

Esempio: H 2 O

Html.fromHtml("H<sub><small><small><small>2</small></small></small></sub>O");
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top