Как программно удалить существующее правило, определенное в XML?



У меня есть линейный макет, который находится внутри относительно макета.
Он установлен в XML-файле справа от другого линейного макета (это отлично работает).
В некоторых случаях я хочу изменить относительное положение макета во время onCreate действия, поэтому мне нужно изменить параметр "справа от", Чтобы связать его с другим макетом.
Я попробовал это:



    RelativeLayout.LayoutParams layoutParams;

layoutParams = (RelativeLayout.LayoutParams) linearLayoutToMove
.getLayoutParams();
layoutParams.addRule(RelativeLayout.RIGHT_OF,
R.id.new_ref_LinearLayout);


но это не работает: o (



какие-то зацепки ?

521   3  

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

    Ничего не найдено.