1

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

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

メソッドと、その子ごとに MyLayout.onLayout(...) で child.layout(...) を呼び出します。他のすべてのものはオリジナルの LinearLayout です。子が子 (MyLayout の孫) のない単純なコントロールである場合、正常に動作し、子は親の MyLayout に正しく配置されます。

ViewGroup (LinearLayout、ViewSwitcher など) を MyLayout の子として使用すると、問題が発生します。この場合、(MyLayout の) 子は適切に配置されますが、各子の内部の (MyLayout の) 孫はそうではありません。wrap_content、fill_parent、layoutWeight などのパラメーターと値が正しく処理されていないようです。たとえば、MyLayout の ViewSwitcher はそのコンテンツを表示せず、LinearLayouts (MyLayout の子) の子 (MyLayout の孫) のサイズは 0px で、CompoundButton (MyLayout の子) はそのテキストを表示しないことがあります...

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

すべてのアドバイスをありがとう。

4

1 に答える 1

3

onMeasure をオーバーライドして、各子で 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

于 2012-01-05T16:31:57.213 に答える