2011-02-05 15 views
1

プログラムでレイアウトを作成しようとしています。プログラムでTextViewの幅を取得する

このレイアウトは動的です。データベースから読み取られたデータに基づいて、毎回違って見える可能性があります。

私はLinearLayoutの向きをverticalに設定しています。

私は「行」にできるテキスト(データベースのデータ)を多くのTextViewに収めたいと思います。

私がやっていることは、行であるLinearLayoutsを構築することです。これらのLinearLayoutsにはTextViewsが設定されます。私はTextViewを構築し、テキストを設定し、幅を調べて、この行に収まるかどうかを確認します(すべてのTextView幅を画面幅から引いて、新しいTextViewが収まるかどうかを確認します)。そうでなければ、私は新しいLinearLayoutを作成し、それにTextViewを追加し始めます。

問題がmyTextView.getWidth()とmyTextView.getMeasuredWidth()の両方を返す0

のはなぜですか? TextViewの幅はどうすればわかりますか?

+0

私は、あなたがgetWidth()をあまりに早く呼び出しているかもしれないと思います。あなたはonCreate()の中でやっているようですが、onMeasure()の呼び出しを試すことができます – TheCottonSilk

答えて

0

まず、コードを記入してください。 2番目のgetWidth/getHeightは0の質問を返します。A LOTですので、他の回答を探すことができます。

onCreate(おそらくそうかもしれない)の間にこれらのメソッドを呼び出すと、UIは描画されていないので、戻り値はゼロです。描画されるまで、ビューの幅または高さを取得することはできません。

+0

AsyncQueryHandlerを使って、私はdbからデータを問い合わせます。 AsyncQueryhandlerはonResume()で呼び出されます。 Cursorがフェッチされると、データとともにViewオブジェクトを構築するメソッドが呼び出されます。私は、直前に描画されたLinearLayoutに新しく作成されたTextViewを追加しようとしましたが、TextViewのgetWidth()は0を返します。描画されていないので、0になります。私はちょうどそれを回避する方法を知らない(意味、私は、私は幅をつかむことができるように描画コードを実行する方法を知らない)。 – Andrew

+0

onLayout()を試しましたか? :このビューが各子にサイズと位置を割り当てる必要がある場合、レイアウトから呼び出されます。子を持つ派生クラスは、このメソッドをオーバーライドして、それぞれの子のレイアウトを呼び出す必要があります。 – TheCottonSilk

+0

実際には、ビューを描画する前にビューの幅と高さを取得できます。 view.measure(View.Measurespec.UNSPECIFIED、View。MeasureSpec.UNSPECIFIED)などのメジャーを使用すると、事前に描画されたmeasuredWidth()およびmeasuredHeight()を取得できます。彼がもう一度尋ねるかもしれない理由の1つは、SO全体のソリューションがひどく、タイマーとハンドラを使用する人がgetWidth()とgetHeight()を使用できるように任意の値に設定されているからです。そのアプローチは悪く、意味をなさない。 – portfoliobuilder

関連する問題