Как установить setLayoutParams () для ImageView? - PullRequest
71 голосов
/ 03 июня 2010

Я хочу установить LayoutParams для ImageView, но, похоже, не могу найти правильный способ сделать это.

Я могу найти документацию в API только для различных ViewGroups, но не ImageView. И все же ImageView, похоже, обладает этой функциональностью.

Этот код не работает ...

myImageView.setLayoutParams(new ImageView.LayoutParams(30,30));

Как мне это сделать?

Ответы [ 4 ]

161 голосов
/ 03 июня 2010

Вам нужно установить LayoutParams для ViewGroup, в которой находится ImageView. Например, если ваш ImageView находится внутри LinearLayout, вы создаете

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(30, 30);
yourImageView.setLayoutParams(layoutParams);

Это потому, что родительский элемент представления должен знать, какой размер выделить для представления.

18 голосов
/ 21 мая 2012

Старая тема, но у меня возникла та же проблема. Если кто-то столкнется с этим, он, вероятно, найдет ответ:

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(30, 30);
yourImageView.setLayoutParams(layoutParams);

Это будет работать только в том случае, если вы добавите ImageView как подвид в LinearLayout. Если вы добавите его в RelativeLayout, вам нужно будет позвонить:

RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(30, 30);
yourImageView.setLayoutParams(layoutParams);
11 голосов
/ 17 января 2013

Если вы изменяете макет существующего ImageView, вы можете просто получить текущие параметры LayoutParams, изменить ширину / высоту и установить его обратно:

android.view.ViewGroup.LayoutParams layoutParams = myImageView.getLayoutParams();
layoutParams.width = 30;
layoutParams.height = 30;
myImageView.setLayoutParams(layoutParams);

Я не знаю, является ли это вашей целью, но если это так, то это, вероятно, самое простое решение.

6 голосов
/ 20 февраля 2013

ImageView получает setLayoutParams из View, который использует ViewGroup.LayoutParams. Если вы используете это, в большинстве случаев он будет аварийно завершать работу, поэтому вам следует использовать getLayoutParams (), который находится в View.class. Это унаследует родительский вид ImageView и будет работать всегда. Вы можете подтвердить это здесь: ImageView расширяет представление

При условии, что у вас есть ImageView, определенный как ' image_view ', а ширина / высота int определена как 'thumb_size'

Лучший способ сделать это :

ViewGroup.LayoutParams iv_params_b = image_view.getLayoutParams();
iv_params_b.height = thumb_size;
iv_params_b.width = thumb_size;
image_view.setLayoutParams(iv_params_b);
...