2016-03-19 10 views
0

がどのようにプログラムでが作成を取得するために、プログラムで作成されたビューの高さを推定しますRelativeLayoutの高さ(すなわち、それは本当に測定することができます)その中のすべてのビューを追加した後?私はプログラムでボタンを作成し、RLの子要素にする必要があり、マージンと整列を設定し、それらをRLに追加して、RLの高さを測定することができます。普通rl.getHeight() 0を返します。私はこのコードを使用:アンドロイド -

rl.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED); 
int rlHeight=rl.getMeasuredHeight(); 

そしてネクサス5(API 23)すべての[OK]を、しかし、API 17と他のデバイス上で(私が覚えているとして、4.2か何かで)それはNPEを投げます。何をすべきか?

P.S. OnGlobalLayoutListenerとOnPreDrawListenerは、setParams(...)を呼び出してRLを外側のレイアウトに追加する前に高さを測定する必要があるため、okではありません。

+1

「実行時のAndroidビューのサイズの決定」の可能な複製(http://stackoverflow.com/questions/3779173/determining-the-size-of-an-android-view-at-runtime) – Dom

答えて

0

GlobalLayoutListenerまたはOnPreDrawListenerを使用して、実行時にプログラムの高さをプログラムで見つけることができます。例:https://stackoverflow.com/a/6569243/4898635

高さを確認してからリスナーを削除してください。そうでなければ、継続的に呼び出されます。

+0

私の場合、それは私のRLsの高さを取得する必要がある(私は "")、私のRelativeLayoutにLayoutParamsを設定し、それを追加する前に、(私はいくつかの異なるものを作成する)外部レイアウト。あなたは他の解決策を提供していただけますか? –

+0

この相対レイアウトをライフサイクルのどの部分に追加しますか? 'onCreateView' /' onCreate'に追加しますか、それともユーザーイベントの後に追加しますか? – Dom

+0

私はonCreateでそれを行います。実際には私はすでに解決策のようなものを見つけました。私はちょうど "outerLayout.addView(rl);"私の最初の質問で与えられたコードの上に、そして私が測定した後に、私はマージンを設定し、just-added RLにlayoutparamsを設定しました。今度はマシュマロの前のデバイスでもうまくいきます。それは最高のソリューションだとは思わない:) –