3

両方のアウトが84を印刷しているのはなぜですか?最初のものは84を読み取り、2番目は220を読み取る必要があります。2回目にクリックすると、両方の出力が220を読み取ります。

public void btnClick(View v) {
    System.out.println(textView1.getWidth());
    textView1.setTextSize(TypedValue.COMPLEX_UNIT_PX, 55);
    System.out.println(textView1.getWidth());
}
4

3 に答える 3

3

既に測定されている場合、テキスト サイズを変更してもビューのサイズは変更されません。SetTextSize() は invalidate() をトリガーしますが、それは将来 onDraw() をトリガーするだけです。ビューが再度測定されることはなく、幅と高さは変わりません。ビューで requestLayout() を呼び出して、幅と高さを再計算できます。

サイズを変更した後にテキストのサイズを確認したいだけの場合 (寸法に関して)、http://developer.android.com/reference/android/graphics/Paint.html#getTextBounds(char[]を試すことができます、int、int、android.graphics.Rect)

于 2012-06-17T01:02:06.973 に答える
1

を呼び出しても、TextViewサイズはすぐには更新されませんsetTextSize()。ビューを無効にするだけで、後で更新されます。ビューのサイズの計算は、レイアウト全体に依存するためコストがかかるため、すぐには実行されません。

少し後で幅を取得してみてください。そうすれば、正しい値が得られます。

于 2012-06-17T00:58:07.160 に答える
0

setTextSizeが完了する前に、2番目のgetWidth()が実行されていると思います。したがって、同じ結果が得られます。Javaは、次の行を実行する前に、コードの各行が完了するのを待ちません。

setTextSize行が完了するまでに5ミリ秒かかり、setTextLineが実行されてから2ミリ秒後に次の行が実行される場合、結果は同じになります。これらを別々のメソッドに分割することができます。または、待機を追加します。

このコードはデバッグ専用ですか?

于 2012-06-17T00:54:10.000 に答える