Почему вы должны создать новый набор RelativeLayout.LayoutParams для каждого элемента, который вы помещаете в свое представление? - PullRequest
3 голосов
/ 24 сентября 2011

Я должен сделать это программно. Итак, терпите меня.

У меня есть текст и две кнопки, которые я установил для выравнивания друг под другом. Поэтому я создал новый экземпляр RelativeLayout.LayoutParams для каждого и добавил правило, чтобы установить его ниже друг друга. Это работает, и я доволен этим.

Мой вопрос: почему я должен создать новый экземпляр, чтобы макет отображал их таким образом? Есть ли способ уменьшить следующий код, чтобы он не был таким повторяющимся (кроме написания моего собственного частного метода, чтобы высушить его. возможно упускать из виду в Android SDK)? Нужно ли продолжать создавать новый экземпляр RelativeLayout.LayoutParams для каждого элемента?

layout = new RelativeLayout(this);
layout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));

text = new TextView(this);
text.setId(1);
text.setText("This is text");
layout.addView(text);

myButton1 = new Button(this);
myButton1.setId(2)
myButton1.setOnClickListener(this);
RelativeLayout.LayoutParams buttonParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
buttonParams.addRule(RelativeLayout.BELOW, text.getId());
layout.addView(myButton1, buttonParams);

myButton2 = new Button(this);
myButton2.setId(3)
myButton2.setOnClickListener(this);
buttonParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
buttonParams.addRule(RelativeLayout.BELOW, myButton1.getId());
layout.addView(myButton2, buttonParams);

Ответы [ 2 ]

1 голос
/ 24 сентября 2011

К сожалению, для RelativeLayout.LayoutParams нет метода removeRule() (по крайней мере, в соответствии с API ), поэтому вам придется каждый раз создавать новый объект LayoutParams.

Я бы согласился с @jeffamaphone, что вы предпочитаете XML-макеты, а не программно устанавливаете макет. Даже если вы не поместите весь макет в XML, вы должны использовать идентификатор ресурса (см. doc ), чтобы установить идентификаторы для элементов. Это гарантирует уникальный идентификатор.

0 голосов
/ 03 марта 2012

вы можете установить любое правило, добавленное в false, используя 0.

buttonParams.addRule(RelativeLayout.BELOW, 0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...