18

描画されるTextView に a の高さを決定しようとしています。私はそれを行うために次のコードを使用しています:

TextView textView = (TextView) findViewById(R.id.textview);
textView.setText("TEST");
int widthSpec = MeasureSpec.makeMeasureSpec(LayoutParams.MATCH_PARENT, MeasureSpec.EXACTLY);
int heightSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
textView.measure(widthSpec, heightSpec);
System.out.println("MeasuredHeight: " + textView.getMeasuredHeight());

出力はMeasuredHeight: 28です。それは何も悪いことではありません。

ただし、TextView長いテキスト文字列を指定すると、折り返しが発生しますが、2 行ではなく 1 行の高さが得られます。

(...)
textView.setText("TESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTEST");
(...)

出力はMeasuredHeight: 28、私が期待する場所MeasuredHeight: 56です。

正しい値が得られないのはなぜですか? また、正しい値を得るにはどうすればよいですか?

4

3 に答える 3

10

これは onCreate メソッドです。ビュー階層全体はまだ測定およびレイアウトされていません。したがって、textView の親は幅を認識しません。そのため、textView の寸法は、親の寸法によって制約されません。

行を次のように変更してみてください。

int widthSpec = MeasureSpec.makeMeasureSpec(200, MeasureSpec.EXACTLY);

したがって、テキストビューの幅は 200 ピクセルになります。

テキストビューの高さが必要な理由を説明していただければ、私たちがお手伝いできるかもしれません。

于 2013-01-17T20:40:35.277 に答える
4

ええ、私は最近自分でこれにぶつかりました。最善の方法は、ViewTreeObserverオブジェクトを作成し、ViewTreeObserver.OnGlobalLayoutListener を登録することです。これは、レイアウト フェーズの後、描画フェーズの前に呼び出されます。その時点で TextView のサイズを取得できます。

厳密に言えば、テキスト自体ではなく、TextView 全体です。内部パディングが含まれている場合、実際のテキストは TextView よりも小さくなります。

実際のテキストの寸法が本当に必要な場合は、 を使用してテキストのLayouttextView.getLayout()オブジェクトを取得してから、layout.getHeight() を使用します。

于 2013-01-17T20:31:37.240 に答える
0

Custom Textview を作成してレイアウトで使用し、 getActual height 関数を使用して実行時に高さを設定する必要があります

 public class TextViewHeightPlus extends TextView {
    private static final String TAG = "TextViewHeightPlus";
    private int actualHeight=0;


    public int getActualHeight() {
        return actualHeight;
    }

    public TextViewHeightPlus(Context context) {
        super(context);
    }

    public TextViewHeightPlus(Context context, AttributeSet attrs) {
        super(context, attrs);
        setCustomFont(context, attrs);
    }

    public TextViewHeightPlus(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);

    }

   @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        actualHeight=0;

        actualHeight=(int) ((getLineCount()-1)*getTextSize());

    }

}
于 2013-10-24T11:39:44.017 に答える