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