2010-06-03 4 views
2

Мне нужно создать два представления программно (потому что мне нужно получить доступ к ondraw одного из видов). По какой-то причине, независимо от того, что я делаю, чтобы добавить представления в contentview, они не отображаются вертикально, один под другим.Помощь с Android LinearLayout или RelativeLayout

Я могу сделать это очень хорошо, используя XML, используя RelativeLayout и расположение макета, но с XML я не могу создать объект вида и перегрузить метод ondraw.

Что я делаю неправильно с программным подходом и как решить эту проблему?

LinearLayout mLinearLayout; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     // Create a LinearLayout in which to add the ImageView 
     mLinearLayout = new LinearLayout(this); 

     TextView tv = new TextView(this); 
      tv.setBackgroundColor(0xff333333); 
     tv.setText("Enter your member number:"); 
     tv.setLayoutParams(new ViewGroup.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT)); 



     DrawableView i = new DrawableView(this); 
     i.layout(0,40,0,0); 
     i.setLayoutParams(new Gallery.LayoutParams(LayoutParams.WRAP_CONTENT, 
       LayoutParams.WRAP_CONTENT)); 

     mLinearLayout.addView(tv); 
     mLinearLayout.addView(i,300,300); 
     setContentView(mLinearLayout); 
    } 

ответ

1

вы можете установить ориентацию линейного объекта макета для вертикального

1

Там, кажется, есть два вопроса, хотя это труднее отлаживать этот код, чем XML.

Во-первых, вам не удалось установить ориентацию по вертикали для линейного макета. Для горизонтальной ориентации все будет одной линией. Для вертикальной компоновки каждый виджет будет находиться на отдельной линии, идущей сверху вниз.

Во-вторых, «Fill Parent» выглядит подозрительно. Любой заполняющий родительский элемент, если только он не допускает относительную компоновку или абсолютный размер, берет на себя все и скрывает все остальные виджеты. Это почти всегда неправильное решение. Вместо этого попробуйте использовать вес.

Вы можете подумать о том, чтобы получить именно это, как вам нравится в XML, и затем преобразовать его в программную настройку, сохраняя при этом преобразование как можно более механическим. Удачи!

1

ли вы попробовать установить ориентацию макет verticcal:

mLinearLayout.setOrientation(1);

+0

Это установило, спасибо большое! – PeEll

+1

@PeEll: Если это исправлено, вы можете отметить это как правильный ответ, чтобы дать кредит Суреша. Это говорит о том, что я настоятельно рекомендую использовать mlinearLayout.setOrientation (VERTICAL), а не mlinearLayout.setOrientation (1). Это улучшит читаемость вашего кода. –