Почему setLayoutParams не меняет размер моего ImageView?

Я делал это в прошлом, и я разочарован, потому что этот метод не работает, как я ожидал. У меня есть изображение, размер которого я хочу изменить до определенных размеров, и я использую код ниже:

snellen.post(new Runnable() {
        @Override
        public void run() {
            ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) snellen.getLayoutParams();
            params.width = (int)(converted*WIDTH_RATIO);
            params.height = (int)(converted*HEIGHT_RATIO);

            snellen.setLayoutParams(params);

            System.out.println("########################################################################### SNELLEN CHART WIDTH: : " + snellen.getWidth());
            System.out.println("########################################################################### SNELLEN CHART HEIGHT: : " + snellen.getHeight());
        }
    });

Я проверил, что такое (converted*WIDTH_RATIO) и (converted*HEIGHT_RATIO), и они находятся где-то в сотнях. Я поместил его в обработчик, чтобы получить правильный getLayoutParams(), потому что в прошлом у меня были проблемы с этим.

Проблема в том, что когда я распечатываю ширину и высоту, они не совпадают с тем, что я установил для них внутри params.width и params.height. Что я здесь делаю неправильно?


person cjnash    schedule 02.08.2017    source источник
comment
Похоже, это должно сработать, не так ли? Взгляните на этот ответ, чтобы узнать о другом подходе.   -  person Cheticamp    schedule 02.08.2017
comment
Поскольку родителем snellen является ConstraintLayout, возможно ли, что ограничения настолько специфичны, что не позволяют вам контролировать размер представления?   -  person Ben P.    schedule 02.08.2017
comment
@БенП. Ты был прав. Мне пришлось настроить изображение так, чтобы оно ограничивалось только одной стороной экрана, а не ограничивалось со всех сторон, используя созданные мной рекомендации. Затем он смог изменить размер изображения. Просто ничего себе, я никогда не ожидал, что это будет проблемой. Не стесняйтесь оставлять свой комментарий в качестве ответа   -  person cjnash    schedule 03.08.2017


Ответы (2)


Поскольку вы приводите LayoutParams snellen к ConstraintLayout.LayoutParams, кажется вероятным, что ваше представление является дочерним элементом ConstraintLayout.

Если это так, возможно, проблема заключается в том, что размеры вашего представления определяются его набором ограничений, и поэтому изменение params.width и params.height не будет иметь никакого эффекта.

Проверьте ограничения вашего представления и убедитесь, что они не определяют размеры представления.

person Ben P.    schedule 03.08.2017

Попробуйте использовать snellen.requestLayout(), я надеюсь, что это поможет вам

person Ahmed Aboelyazeed    schedule 02.08.2017
comment
куда? над моим .post или над моим вызовом getLayoutParams? - person cjnash; 02.08.2017
comment
после snellen.setLayoutParams(params); но я проверил, что значения, которые вы пытаетесь назначить, не назначаются Imageview - person Ahmed Aboelyazeed; 02.08.2017
comment
Да, только что попытался добавить его, и это, похоже, ничего не дало. В любом случае спасибо - person cjnash; 02.08.2017
comment
каков родительский макет для просмотра изображений / - person Ahmed Aboelyazeed; 02.08.2017
comment
ограничениеМакет - person cjnash; 02.08.2017
comment
я попробовал ваш пример кода со статическими значениями, он работает нормально, я думаю, проблема с вашим (преобразованнымWIDTH_RATIO) и (преобразованнымHEIGHT_RATIO) - person Ahmed Aboelyazeed; 02.08.2017
comment
Давайте продолжим это обсуждение в чате. - person cjnash; 02.08.2017