Как программно удалить существующее правило, определенное в XML?
У меня есть линейный макет, который находится внутри относительно макета.
Он установлен в XML-файле справа от другого линейного макета (это отлично работает).
В некоторых случаях я хочу изменить относительное положение макета во время onCreate действия, поэтому мне нужно изменить параметр "справа от", Чтобы связать его с другим макетом.
Я попробовал это:
RelativeLayout.LayoutParams layoutParams;
layoutParams = (RelativeLayout.LayoutParams) linearLayoutToMove
.getLayoutParams();
layoutParams.addRule(RelativeLayout.RIGHT_OF,
R.id.new_ref_LinearLayout);
но это не работает: o (
какие-то зацепки ?
3 ответов:
вы не можете удалить правило, потому что все правила всегда хранятся в массиве java фиксированного размера. Но вы можете установить правило
0. НапримерlayoutParams.addRule(RelativeLayout.RIGHT_OF, 0); layoutParams.addRule(RelativeLayout.BELOW, R.id.new_ref_LinearLayout);EDIT (спасибо Роджер Быстрое):
начиная с уровня API 17, класс
RelativeLayout.LayoutParamsимеет следующий метод:public void removeRule(int verb)так что вы можете удалить правило, используя следующую строку кода:
layoutParams.removeRule(RelativeLayout.RIGHT_OF);и вы получите точно такой же результат, как при "добавлении" a нулевое правило как:
layoutParams.addRule(RelativeLayout.RIGHT_OF, 0);
Я думаю, вам нужно позвонить:
relativeLayout.updateViewLayout(linearLayoutToMove, layoutParams);после изменения LayoutParams.
в ответ на редактирование, вы можете создать новые LayoutParameters с помощью:
LinearLayout.LayoutParams = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT);а затем добавить свои новые правила. Затем обновите параметры макета с помощью ранее упомянутого метода updateViewLayout ().
добавьте следующий код к существующему коду
linearLayoutToMove.setLayoutParams(layoutParams)Я думаю, что это должно сделать работу. В случае, если вышеуказанная строка не работает, попробуйте позвонить
linearLayoutToMove.invalidate()после строке выше.
Comments