1

親ビューのレイアウトを設定したいだけで、子のレイアウト設定を保持したい場合、すべての子の Layout メソッドを呼び出さないようにすることはできますか?

現在、parent.layout() を呼び出すと、そのすべての子の幅と高さがゼロになります。レイアウトを ALL に設定する代わりに、どうにかして子を FillParent に設定できませんか? :-(

ちなみに、私の親は、主に Textviews を含む拡張 LinearLayout です。



編集: いくつかのコード:

myLayout は LinearLayout を拡張します

myLayout.layout(left, top, right, bottom);                
myLayout.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, 1));

for each child in myLayout do {
  child.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
  if (v instanceof TextView) {
    ((TextView) v).setGravity(Gravity.CENTER);
  }

しかし、子はまだ持っています:
左: 0 上: 0 右: 0 下: 0

編集 2: ところで: 上記のコードは、ViewGroup の onLayout メソッドの内部にあります。

4

2 に答える 2

0

onLayout()拡張LinearLayoutのメソッドで子の幅と高さを設定できます。例えば:

@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
    super.onLayout(changed, l, t, r, b);
    int count = getChildCount();
    for (int i = 0; i < count; i++) {
        final View child = getChildAt(i);
        // set width of every child to FILL_PARENT, and height to WRAP_CONTENT
        child.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
    }
}

なぜうまくいかないsetGravity()のかわかりません。子供ではなくレイアウトに重力を設定できますか?重力を設定できます。例onLayout()

if (child instanceof TextView) {
    ((TextView) child).setGravity(Gravity.CENTER);
}
于 2012-04-13T12:03:55.363 に答える
0

子ビューは測定されていないため (layout() を呼び出さないため)、システムはまだ 0x0px であると認識しています。

Android は、測定/レイアウトの 2 パス システムを使用します。

開発者向けドキュメントをチェックして、描画/レイアウト シーケンスがどのように行われるかを確認してください: http://developer.android.com/guide/topics/ui/how-android-draws.html

layout()を呼び出してから、子の高さ/幅を設定してから、 を呼び出してみてくださいrequestLayout()

それが役立つことを願っています。

于 2012-04-17T02:28:49.270 に答える