Как программно установить атрибут родительского права выравнивания макета кнопки в относительном макете?


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

 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 252

3 ответа:

вы можете получить доступ к любому 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
  1. вам нужно создать и идентификатор кнопки нужно заполнить: btn1.setId(1);
  2. вы можете использовать переменную params для добавить параметры в макет, я думаю, что метод addRule(), проверьте из документов Android java для этого

добавить RelativeLayout атрибут, значение которого равно true или false use 0 на ложные и RelativeLayout.TRUE для true:

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

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