web-dev-qa-db-ja.com

TextViewの最小幅(文字数)を設定するにはどうすればよいですか?

私はここでこれをよく検索しましたが、解決策を見つけることができません。

整数を含むRelativeLayoutにTextViewがあります。数値の範囲は1〜99です。TextViewのサイズを変更して、「1」しか含まれていない場合でも、その幅が常に文字列「99」の幅になるようにする方法を教えてもらえますか?

このTextViewの右側のコンポーネントの位置はその幅に依存するため、これが必要です。したがって、すべてがTextViewに含まれる桁数に応じた位置になります。

これがXMLで行われるのか、コードで行われるのかは関係ありません。TextViewの幅をピクセル単位で設定する必要はありません。

考えられる解決策をありがとう。重要な情報を見逃していないか尋ねてください!

26
If This Is Art

これを試して:

Android:layout_width="wrap_content"
Android:minEms="2"
58
Adrian

フォントがモノスペースの場合、Emsは機能します。プロポーショナルフォントの場合、2つの「m」ではなく2つの「0」の幅が必要です。次のようにTextPaint.measureTextにフォールバックできます。

float measureText = Zip.getPaint().measureText("00000");
Zip.setWidth(Zip.getPaddingLeft() + Zip.getPaddingRight() + (int) measureText);
19
pforhan

最良の方法はTextPaintを使用することです。簡単な例を次に示します。

TextPaint textPaint = new TextPaint();
textPaint.setTextSize(yourTextView.getTextSize());
yourTextView.setMinWidth((int) textPaint.measureText("-88.88"));

TextPaintオブジェクトでテキストサイズを指定することを忘れないでください
measureTextに、表示されると予想される最長の文字列を入力します(テキストが100未満の正または負の数値を処理でき、カンマの後に2桁の数字があると仮定して、「-88.88」と記述しました)

1
Andriy Shpek

PaintクラスでgetTextBounds()メソッドを探していると思います。自分で試してみませんでした。