2013-05-11 2 views
-1

Я провел некоторое исследование, но ответ, который я нашел, не работает для меня. Вот часть моего кода. R.id.relative является идентификатор RelativeLayout в XML-файлПоместить элементы в RelativeLayout динамически

RelativeLayout RL = (RelativeLayout) findViewById(R.id.relative); 

    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
    RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 

    TextView title = new TextView(this); 
    title.setText(" History "); 
    title.setId(99099); 
    title.setTextSize(30); 
    title.setGravity(Gravity.CENTER); 
    params.addRule(RelativeLayout.ALIGN_PARENT_TOP); 
    title.setLayoutParams(params); 

    RL.addView(title); 

    RelativeLayout.LayoutParams test_params = new RelativeLayout.LayoutParams(
    RelativeLayout.LayoutParams.WRAP_CONTENT,RelativeLayout.LayoutParams.WRAP_CONTENT); 

    Button test = new Button(this); 
    test.setText(" Back "); 
    test_params.addRule(RelativeLayout.BELOW,99099); 
    test.setId(199291); 
    test.setGravity(Gravity.CENTER); 
    test.setLayoutParams(test_params); 

    RL.addView(test); 

    RelativeLayout.LayoutParams test_params2 = new RelativeLayout.LayoutParams(
    RelativeLayout.LayoutParams.WRAP_CONTENT,RelativeLayout.LayoutParams.WRAP_CONTENT); 

    Button test2 = new Button(this); 
    test2.setText(" Clear "); 
    test_params2.addRule(RelativeLayout.BELOW,test.getId()); 
    test2.setGravity(Gravity.CENTER); 
    test.setLayoutParams(test_params2); 

    RL.addView(test2); 

все 3 пунктов было показать, но они складывают вместе. Я не могу получить их ниже другого. Может ли кто-нибудь помочь?

+0

Как вы думаете, Android игнорирования ваши правила - 'addRule (RelativeLayout.BELOW, title.getId());'? – Axarydax

+0

Что произойдет, если вы измените значение title.getId() на значение id 99099? – Axarydax

+0

ya все равно то же самое, теперь я пытаюсь поместить params в метод addview. – user2372160

ответ

-1

Добавленные вызывают ваше мнение, чтобы быть уложено вместе.Ела вам нужно добавить его следует использовать по следующему правилу правила.

test_params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, 1); 

Затем добавьте вид на ваш RelativeLayout с LayoutParams:

RL.addView(yourAdView, rLParams); 

То же самое для каждого cases.try к run.It будет решить вашу проблему

+0

Имеет ли rLParams равные test_params? Я должен сделать следующее: ** RL.addView (Btn1, test_params); ** – user2372160

+0

oh ya это сработало, с помощью addView для правильной настройки макета – user2372160

+0

Спасибо за ваш комментарий..У меня я получил отрицательный голос за свой комментарий. Спасибо за вашу оценку – Chiradeep

0

Изменение test.setLayoutParams(test_params2); в test2.setLayoutParams(test_params2);

Объяснения: Вы нечаянно установить Формуляр Params из test во второй раз, с Params, которые инструктируют его ниже себя, что я предполагаю, что просто ставит его в левом верхнем углу (размещение по умолчанию в a RelativeLayout). Поскольку вы никогда не даете test2 любых параметров макета, он также получает размещение по умолчанию. Итак, все находится наверху и, таким образом, появляется поверх друг друга.

Кстати, если вы просто хотите, чтобы они располагались линейно, почему бы не использовать вертикальные LinearLayout?

+0

Почему это было приостановлено? – Karakuri

+0

+1 для хороших объяснений – AndroidDev

1

Из того, что я смог узнать, вам нужно добавить представление, используя LayoutParams. Вот пример:

LinearLayout linearLayout = new LinearLayout(this); 

RelativeLayout.LayoutParams relativeParams = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); 
relativeParams.addRule(RelativeLayout.ALIGN_PARENT_TOP); 

parentView.addView(linearLayout, relativeParams); 

И относительно расположить элементы программно необходимо присвоить идентификаторы для них, это останавливает их от «перекрывания».

TextView tv1 = new TextView(this); 
tv1.setId(1); 
TextView tv2 = new TextView(this); 
tv2.setId(2); 

Тогда addRule(RelativeLayout.RIGHT_OF, tv1.getId());

+0

Мне очень любопытно об этой строке: ** parentView.addView (linearLayout, relativeParams); ** Означает ли это, что я поместил еще один RelativeLayout в свой макет в xml-файле. – user2372160

+1

Да; это был всего лишь пример – AndroidDev

Смежные вопросы