При расширении дочерних представлений LinearLayout не отображаются

Хорошо. Итак, я начинаю свою деятельность в Main, беру FragmentManager и создаю экземпляр Fragment, который должен возвращать View. OK. Поэтому я расширил LinearLayout, чтобы было что вернуть. Моя активность и фрагмент счастливы, а я нет.

Есть три LinearLayouts, которые я создаю в родительской ViewGroup (код ниже). Я проверил это, подсчитав детей и установив цвета фона так, чтобы они контрастировали друг с другом. Родитель также меняет размер в зависимости от того, насколько высоки я делаю дочерние элементы (когда я не объявляю никаких 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

}

}

Ничто не равно нулю, все мои элементы (3 ViewGroups и 2 View) присутствуют в дереве, но не видны. Я пытался выводить дочерние элементы на передний план через родителя и дочерние элементы, создавая их с помощью различных суперметодов и аннулируя представление аналогичным образом. В чем дело? Это так же просто, как не иметь представления о том, что я делаю?


person Wallyworld    schedule 09.06.2011    source источник


Ответы (1)


Проблема просто в том, что вы переопределяете onLayout и ничего с ним не делаете. Вам нужно переопределить это только в том случае, если вы хотите самостоятельно разместить дочерние элементы (т. е. вы разрабатывали какой-то уникальный пользовательский макет). В этом случае просто удалите этот метод или вызовите super.onLayout.

person sksamuel    schedule 09.06.2011
comment
Вау... в какой-то момент я расширял что-то, что требовало переопределения. Большое спасибо. - person Wallyworld; 09.06.2011