Подтвердить что ты не робот

Устанавливать вес (в процентах) программно

У меня есть две кнопки, которые я бы хотел добавить в динамический вес. Они начинаются с веса 0,5 (что, конечно, добавляет к весу LinearLayout 1), но если предпочтение верно, то я бы хотел изменить их веса на 0,7 и 0,3 соответственно. Я могу установить вес в XML, но я не могу найти, как его программно изменить.


Решение

LinearLayout.LayoutParams PO = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, .60f);
LinearLayout.LayoutParams MO = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, .20f);
4b9b3361

Ответ 1

Посмотрите LayoutParams, у него есть поле для установки веса

Ответ 2

Используйте это для утилизации объекта LayoutParam:

((LinearLayout.LayoutParams) view.getLayoutParams()).weight = 0.2f;
view.refreshDrawableState(); // This is to explicit force the refresh.

Ответ 3

Если конструктор с шириной, высотой и весом не работает, попробуйте использовать конструктор с шириной и высотой. А затем вручную установите вес.

И если вы хотите, чтобы ширина была задана в соответствии с весом, установите ширину как 0 в конструкторе. То же самое относится и к высоте. Ниже код работает для меня.

LinearLayout.LayoutParams childParam1 = new LinearLayout.LayoutParams(0,LinearLayout.LayoutParams.MATCH_PARENT);
childParam1.weight = 0.3f;
child1.setLayoutParams(childParam1);

LinearLayout.LayoutParams childParam2 = new LinearLayout.LayoutParams(0,LinearLayout.LayoutParams.MATCH_PARENT);
childParam1.weight = 0.7f;
child2.setLayoutParams(childParam2);

parent.setWeightSum(1f);
parent.addView(child1);
parent.addView(child2);