Могу ли я установить «android: layout_below» во время выполнения программно? - PullRequest
190 голосов
/ 19 июля 2010

Возможно ли при создании RelativeLayout во время выполнения программно установить эквивалент android:layout_below?

Ответы [ 3 ]

440 голосов
/ 19 июля 2010

Да:

RelativeLayout.LayoutParams params= new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT); 
params.addRule(RelativeLayout.BELOW, R.id.below_id);
viewToLayout.setLayoutParams(params);

Сначала код создает новые параметры макета, указывая высоту и ширину.Метод addRule правильно добавляет эквивалент xml android:layout_below.Тогда вы просто позвоните View#setLayoutParams, если хотите получить эти параметры.

135 голосов
/ 11 февраля 2014

В качестве альтернативы вы можете использовать представления текущих параметров макета и изменить их:

RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) viewToLayout.getLayoutParams();
params.addRule(RelativeLayout.BELOW, R.id.below_id);
6 голосов
/ 07 ноября 2017

Хотя ответ @jackofallcode правильный, его можно записать в одну строку:

((RelativeLayout.LayoutParams) viewToLayout.getLayoutParams()).addRule(RelativeLayout.BELOW, R.id.below_id);
...