1

プログラムでテキストビューの高さまたは少なくとも行数を取得したいのですが、ログに0と表示されます。何が問題になっていますか?これが私のコードです:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_off);

    titreOff = (TextView) findViewById(R.id.offTitre);
    titreOff.setText("some text"); // displays 2 lines of text with the font size I used
    System.out.println(titreOff.getLineCount() + " and " + titreOff.getHeight());
}

アドバイスありがとうございます

4

3 に答える 3

3

ではonCreate()TextViewレイアウト パスがないため、現在、幅と高さがゼロになっています。の寸法を取得したい場合は、いくつかの解決策がありますTextView

  1. をに追加OnGlobalLayoutListenerしますTextViewViewTreeObserver(たとえばtitreOff.getViewTreeObserver().addOnGlobalLayoutListener(listener)、そこで変更を処理します)。

  2. オーバーライドTextViewすることで、特別なケースをオーバーライドして処理しますonLayout()(ここでは、パラメーターとしての次元を持ちTextViewます。

または、測定の最終目標は何ですか? いくつかの詳細を与えることができれば、これよりも簡単な解決策があるかもしれません.

于 2012-07-16T13:58:27.957 に答える
2

TextViewメソッドを実行している間、アプリは実際のサイズを認識していませんonCreate()。解決策は、出力をここに移動することです。

onWindowFocusChanged(boolean hasFocus) {
    if (!hasFocus) {
        titreOff = (TextView) findViewById(R.id.offTitre);
        System.out.println(titreOff.getLineCount() + 
        " and " + titreOff.getHeight());
    }
}
于 2012-07-16T14:09:10.133 に答える
1

setText()をすぐに更新するのではなくTextView、無効にするだけです。新しいテキストは、次の再描画時にのみ設定されます。古いものを取得する前に高さを取得しようとすると。

代わりに、サブクラスTextView化してオーバーライドする必要があります。サイズが変更onSizeChanged()されるたびに通知されます。TextView

于 2012-07-16T14:09:26.763 に答える