Как программно установить атрибут layout_align_parent_right кнопки в относительной компоновке? - PullRequest
270 голосов
/ 09 января 2011

У меня есть относительный макет, который я создаю программно:

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

Теперь у меня есть две кнопки, которые я хочу добавить в этот относительный макет.Но проблема в том, что обе кнопки отображаются слева от перекрывающих друг друга RelatiiveLayout.

buttonContainer.addView(btn1);
buttonContainer.addView(btn2);

Теперь я хочу знать, как программно установить атрибут кнопок android:layout_alignParentRight="true "или android:layout_toLeftOf="@id/btn", как мы это делаем в xml?

Ответы [ 3 ]

618 голосов
/ 09 января 2011

Вы можете получить доступ к любому LayoutParams из кода, используя View.getLayoutParams. Вы просто должны быть очень осведомлены о том, что LayoutParams ваш доступ. Обычно это достигается путем проверки содержащего ViewGroup, если у него есть LayoutParams внутренний дочерний элемент, то это тот, который вы должны использовать. В вашем случае это RelativeLayout.LayoutParams. Вы будете использовать RelativeLayout.LayoutParams#addRule(int verb) и RelativeLayout.LayoutParams#addRule(int verb, int anchor)

Вы можете добраться до него по коду:

RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)button.getLayoutParams();
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
params.addRule(RelativeLayout.LEFT_OF, R.id.id_to_be_left_of);

button.setLayoutParams(params); //causes layout update
12 голосов
/ 09 января 2011
  1. вам нужно создать и id для кнопок, на которые вы хотите сослаться: btn1.setId(1);
  2. вы можете использовать переменную params для добавления параметров в ваш макет, я думаю, что метод addRule(), проверьте документы по Java для этого объекта LayoutParams.
5 голосов
/ 10 июня 2018

Для добавления атрибута RelativeLayout, значение которого равно true или false, используйте 0 для false и RelativeLayout.TRUE для true:

RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) button.getLayoutParams()
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.TRUE)

Не имеет значения, был ли атрибут ужедобавлено, вы все еще используете addRule(verb, subject), чтобы включить / отключить его.Тем не менее, после API 17 вы можете использовать removeRule(verb), что является просто сокращением для addRule(verb, 0).

...