2012-03-26 6 views
1

親ビューのレイアウトを設定したいだけで、子供のレイアウト設定を保持したい場合は、すべての子供のレイアウトメソッドを呼び出すことができません。Android:center Textview in Extended Layout

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

ところで

、私の親はほとんど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メソッドの内部です。

答えて

0

あなたの子ビューを測定取得されていない(あなたは自分のレイアウトを呼び出すことはありませんので、())、システムはまだ彼らは0x0pxをしていると思うので。

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

描画/レイアウトシーケンスが起こるかを確認するために開発者向けドキュメントをチェックアウト:http://developer.android.com/guide/topics/ui/how-android-draws.html

あなたはその後、requestLayout()を呼び出し、その後、子供の高さ/幅を設定し、そのlayout()を呼び出ししようとする場合があります。

希望に役立ちます。

0

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

@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); 
} 
+0

は機能しません。子供はまだ左に残っています:0上:0右:0下:0 –