Question

Les clips Android TextView de mon texte indices (voir image ci-dessous), même si j'utilise android:layout_height="wrap_content" pour le TextView. Y at-il une solution / travail autour pour cela?

P / S: Les indices supérieurs fonctionnent très bien

Remarque: padding ne fonctionne pas.

  • J'a même essayé d'ajouter un rembourrage de 50dip mais il n'a pas aidé.
  • Je peux utiliser une hauteur absolue comme 50dip mais tout mess quand j'ai besoin texte autour.

Exemple de code:

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

Était-ce utile?

La solution

Cette solution a fonctionné pour moi.

texte est généralement fait en exposant plus petit lorsque le navigateur rend, qui ne semble pas se produire ici afin que vous puissiez reproduire ce (et résoudre ce problème) en faisant ceci:

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

Autres conseils

La plupart des réponses suggèrent d'ajouter rembourrages ou d'utiliser des sous / petits indices supérieurs. Celles-ci pourraient être des solutions de contournement réparable, mais ils ne résolvent pas vraiment le problème. Idéalement, nous voulons Android de prendre en compte la sous / superscript lors du calcul de la hauteur de ligne. Je pense avoir trouvé comment le faire, et je partage pour les gens googler cette question.

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

L'astuce est BufferType.SPANNABLE. Apparemment, il est TextView accorder plus d'attention aux balises et calculer la hauteur de la ligne correctement.

Pour une légère variation indice à la suggestion ci-dessus est nécessaire, deux petits tags:

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

android: lineSpacingExtra = "4DP" devrait résoudre cela va ajouter l'interligne supplémentaire ci-dessous votre texte, et de garder d'obtenir coupure indice. Je ne l'ai pas essayé avec superscript il peut maintenant résoudre ce problème.

J'ai eu le même problème, après avoir lu les messages, j'ai trouvé à travailler.

Exemple: H 2 O
il suffit d'utiliser:

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

BufferType.SPANNABLE est important car il indiquera textview de considérer la durée superscript.

Si vous utilisez gestionnaire de balises personnalisées pour HTML, vous pouvez aussi l'utiliser comme ceci:

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

it helps quelqu'un qui cherche même problème.

Je l'affichage des fractions et des nombres fractionnaires donc je suis en utilisant à la fois super et subscripting ensemble. Le Html.fromHtml ne fonctionne pas pour moi, ce soit le clipser en haut ou en bas.

Bizarrement, les nombres fractionnaires ont travaillé correctement, mais les fractions par eux-mêmes ne l'ont pas.

J'ai fini à l'aide d'un SpannableString avec un SubscriptSpan ou un SuperscriptSpan, puis définir la taille de la police dans un TextAppearanceSpan.

Une fois que je l'avais fait que je devais élargir la hauteur du TextView ainsi.

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

Alors je dû agrandir la hauteur:

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

calcsize renvoie un rectangle de délimitation de la plus grande chaîne de caractères dans la matrice d'éléments d'affichage.

fractionAdjustment est une valeur choisie empiriquement qui fonctionne pour la taille de la police sélectionnée et ajustée pour la géométrie de l'écran.

Note:. Ceci est TextView dans un ListView, de sorte que pourrait avoir un impact aussi bien

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

Les valeurs empiriques:

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

J'ai fait face à la même question dans ICS et au-dessous des versions Android. Je fixe la question par une simple étape

Donner une hauteur minimale à la vue du texte. Il résoudra le problème.

Vous pouvez régler la hauteur minimale par XML.

        android:minHeight="30dp"

Ou dynamiquement

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

            tv.setMinHeight(52);
    }

Cela a fonctionné pour moi avec petite balise .

  1. A l'intérieur du TextView ajouter
  

android: paddingBottom = "1DP"

  1. Utilisez le petit Tag après l'indice
  

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

Remarque S'il vous plaît noter, l'étape 1 est important, mon texte était encore en train d'abattre dans certains cas, en utilisant paddingBottom a résolu. Ne pas oublier d'enlever les espaces dans les balises sous et petits qui sont présents dans ma réponse :)

Le nombre de Plus balises là-dedans, plus l'indice sera obtenir et vous devriez être en mesure de le voir sans saccade.

Par exemple: H 2 O

Html.fromHtml("H<sub><small><small><small>2</small></small></small></sub>O");
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top