25

Android TextViewは、TextViewに使用している場合でも、テキストの添え字(下の画像を参照)をandroid:layout_height="wrap_content"切り取ります。これに対する修正/回避策はありますか?

代替テキスト

P / S:上付き文字は正常に機能します

注:パディングは機能しません。

  • 50dipのパディングを追加してみましたが、効果がありませんでした。
  • 50dipなどの絶対的な高さを使用できますが、テキストを折り返す必要がある場合は、すべてが台無しになります。

サンプルコード:

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

4

9 に答える 9

21

このソリューションは私にとってはうまくいきました。

上付き文字のテキストは通常​​、ブラウザがレンダリングするときに小さくなりますが、ここでは発生しないようです。これを行うことで、それを複製 (およびこの問題を解決) できます。

someTextView.setText(Html.fromHtml("Some text<sup><small>1</small></sup>"));
于 2011-10-06T14:25:32.663 に答える
10

下付き文字については、上記の提案をわずかに変更する必要があります。2 つの小さなタグ:

    textView.setText(Html.fromHtml(
        "HCO<sub><small><small>3</small></small></sub>));
于 2012-01-12T00:53:39.903 に答える
7

私は同じ問題を抱えていたので、投稿を読んだ後、これが機能していることがわかりました。

例: H 2 O
単純に使用:

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

BufferType.SPANNABLE は、textview に上付き文字スパンを考慮するように指示するため、重要です。

HTML 用のカスタム タグ ハンドラーを使用している場合は、次のように使用することもできます。

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

同じ問題を探している人に役立つことを願っています。

于 2016-07-11T10:51:51.860 に答える
1

ICS 以下の Android バージョンでも同じ問題に直面しました。簡単な手順で問題を修正しました

Text View に最小の高さを与えます。それは問題を解決します。

xml で最小の高さを設定できます。

        android:minHeight="30dp"

または動的に

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

            tv.setMinHeight(52);
    }
于 2014-03-01T06:26:29.550 に答える
1

分数と帯分数を表示しているので、上付き文字と下付き文字を一緒に使用しています。Html.fromHtml はうまくいきませんでした。上部または下部が切り取られました。

奇妙なことに、帯分数は正しく機能しましたが、分数自体は機能しませんでした。

結局、SubscriptSpan または SuperscriptSpan で SpannableString を使用し、TextAppearanceSpan でフォント サイズを設定しました。

それを行ったら、TextView の高さも拡張する必要がありました。

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

次に、高さを拡張する必要がありました。

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

CalcSize は、表示要素の配列内の最大の文字列の境界四角形を返します。

fractionAdjustment は、画面のジオメトリに合わせて調整された選択されたフォント サイズで機能する、経験的に選択された値です。

注: これは TextView が ListView 内にあるため、影響がある可能性もあります。

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

経験値:

fractionAdjustment = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 14, resources.getDisplayMetrics());
fractionFontSize = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 11, resources.getDisplayMetrics());
于 2011-10-14T20:06:34.397 に答える
1

これはSmallタグと一緒に私にとってはうまくいきました。

  1. TextView内に追加

android:paddingBottom="1dp"

  1. 下付き文字の後に小さなタグを使用する

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

注 注意してください、ステップ 1 は重要です。私のテキストは、場合によってはまだ削減されていましたが、paddingBottom を使用して解決しました。私の答えにあるサブタグと小さなタグのスペースを削除することを忘れないでください:)

于 2016-08-04T20:22:19.807 に答える
0

そこにある <small> </small> タグの数が多いほど、添え字が小さくなり、クリップされずに表示できるはずです。

例: H 2 O

Html.fromHtml("H<sub><small><small><small>2</small></small></small></sub>O");
于 2014-08-05T10:11:52.937 に答える