1

私はLinearLayoutから派生したカスタムレイアウトマネージャを作成しました。で(私は実際のLinearLayout機能の多くを使用していないが、私は多くのViewGroupの抽象メソッドのすべてを気にする必要はありません。)私はAndroidカスタムレイアウトマネージャ - 子供のレイアウト

protected void onLayout(boolean changed, int l, int t, int r, int b) 

方法上書きしていると私は(...)child.layout呼び出しますMyLayout.onLayout(...)その子それぞれに対して。他のすべてのものはオリジナルのLinearLayoutです。子どもがいない単純なコントロール(MyLayoutの孫)であれば、正常に動作し、子は親MyLayoutに正しく配置されます。

MyLayoutの子として子を持つViewGroup(LinearLayout、ViewSwitcher、...)を使用すると問題が発生します。このケースでは、子ども(MyLayoutの子ども)はうまく配置されますが、子どもの中には(MyLayoutの)孫が配置されません。パラメタとwrap_content、fill_parent、layoutWeightなどの値は正しく処理されていないようです。例えばMyLayoutでViewSwitcherは、その内容が表示されない、fill_parentとLinearLayouts(MyLayoutの子)子ども(MyLayoutの孫)が0PXの大きさを持って、CompoundButton(MyLayoutの子)が、時にはそのテキストを表示しません...

それMyLayout.onLayoutのchild.layout(...)は、各子のサイズと位置を正しく設定しているようですが、子がViewGroupであれば、それぞれの子がうまく動作するレイアウトを作るために、他のメソッドを呼び出す必要があります。そのようなものがありますか?MyLayoutを変更したばかりのonLayoutはうまくいくはずですか?

すべてのアドバイスありがとうございます。

答えて

3

あなたはonMeasureを上書きし、それぞれの子にmeasure()を呼び出す必要があるように聞こえます。子がビューグループで、孫がビューの場合は、子をループしてmeasure(int、int)を呼び出す必要があります。子供たちは孫たちの措置をとるべきです。

はのLinearLayoutのソースを見てみましょう: http://www.grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.3.6_r1/android/widget/LinearLayout.java#LinearLayout.onMeasure%28int%2Cint%29

+0

あなたも – siliconeagle

+0

どうもありがとうを測定した後getMeasuredWidth()&getMeasuredHeight()を使用することができchould!あなたが正しいです! –

+0

ポイントを授与するのはどうですか?それは正しいことです..;) – siliconeagle

関連する問題