Как программно установить атрибут родительского права выравнивания макета кнопки в относительном макете?
у меня есть родственник макет, который я создаю программно:
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)
.