У меня есть вид (содержащий объявление), который мне нужно масштабировать, чтобы соответствовать ширине экрана в определенный момент времени (после загрузки объявления). Поэтому у меня есть метод setHeight(myView)
, который вычисляет правильную высоту для данной ширины экрана и соответственно изменяет LayoutParams View. Важнейшая часть кода такова:
LayoutParams params = myView.getLayoutParams();
int width = myView.getWidth();
if (params != null && width > 0) {
params.height = (int) Math.round(ratio * width);
}
Похоже, что это работает по большей части, но иногда представление не масштабируется. Кажется, что он работает только последовательно, если я добавлю следующую строку внизу:
myView.setLayoutParams(params);
Это тоже имеет смысл, поскольку Android Views вызывает requestLayout()
в своем методе setLayoutParams()
. И наоборот, я не вижу, как изменение в публичном поле (params.height
) приведет к изменению макета.
С другой стороны, я неоднократно нахожу учебные пособия в сети, где параметры просто меняются, а затем снова не отображаются в представлении.
Итак, мой вопрос: правильно ли, чтобы сразу обновить макет после изменения свойства LayoutParams, мне нужно снова вызвать setLayoutParams
? И что простое изменение свойства приведет только к изменению макета в какой-то более поздний момент времени, когда изменение макета запускается из другого места?