2011-06-09 111 views
5

好的。所以我在Main中開始我的活動,抓住FragmentManager並實例化一個需要返回View的片段。好。所以我擴展了一個LinearLayout以便返回一些東西。我的活動和片段很開心,但我不是。擴展LinearLayout子視圖時不可見

我在父ViewGroup中創建的三個LinearLayouts(代碼如下)。我通過計算孩子數量和設置背景顏色來相互比較來驗證這一點。父母也會根據我生孩子的高度來更改大小(當我沒有在父母上聲明任何LayoutParams時)。

public class Mainmenu extends LinearLayout { 
private ArrayList<LinearLayout> panes = new ArrayList<LinearLayout>(); 
private Context context; 
private final int 
    LEFT = 0, CENTER = 1, RIGHT = 2; 

public Mainmenu(Context c) { 
    super(c); 
    context = c; 
    setBackgroundColor(Color.WHITE); 
    setOrientation(HORIZONTAL); 
    setLayoutParams(
      new LinearLayout.LayoutParams(
        LinearLayout.LayoutParams.FILL_PARENT, 
        LinearLayout.LayoutParams.FILL_PARENT)); 


    for(int i=0;i<=RIGHT;i++){          //Create the (3) Panes 
     LinearLayout ll = new LinearLayout(context); 
     ll.setLayoutParams(
       new LinearLayout.LayoutParams(300, 
         LinearLayout.LayoutParams.FILL_PARENT)); 
     switch(i){ 
     case LEFT | RIGHT: 
      ll.setBackgroundColor(Color.DKGRAY); 
     default: 
      ll.setBackgroundColor(Color.BLACK); 
     } 
     ll.setOrientation(LinearLayout.VERTICAL); 
     ll.setVisibility(VISIBLE); 
     ll.setWillNotDraw(false); 
     panes.add(i, ll); 
     addView(ll); 
    } 

    LinearLayout.LayoutParams buttons = 
     new LinearLayout.LayoutParams(100, 50); 
    buttons.setMargins(15, 5, 5, 0); 

    TextView tv1 = new TextView(context); 
    tv1.setText("hello"); 
    tv1.setTextColor(Color.RED); 
    panes.get(LEFT).addView(tv1, buttons); 

    Button button = new Button(context); 
    button.setText("Launch Editor"); 
    button.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v){ 
     } 
    }); 
    panes.get(CENTER).addView(button); 
} 

@Override 
protected void onLayout(boolean changed, int l, int t, int r, int b) { 
    // TODO Auto-generated method stub 

} 

} 

什麼都不爲null,我的所有元素(3個ViewGroups和2 Views)都存在於樹中,但不可見。我試圖通過父母和孩子把孩子帶到前面,用不同的超級方法創造他們,並以同樣的獵槍方式使視圖無效。這是怎麼回事?是不是很清楚我在做什麼?

回答

3

問題僅僅是因爲你重寫了onLayout而無所作爲。如果你想自己佈局孩子,你只需要重寫這個(例如,你正在設計一些獨特的自定義佈局)。在這種情況下,只需刪除該方法,或者調用super.onLayout。

+0

哇...在某些時候,我正在擴展一些需要被覆蓋的東西。非常感謝。 – Chaos 2011-06-09 08:46:39