Программно установить ширину и высоту ImageView?

Как программно установить ширину и высоту ImageView?


person praveenb    schedule 29.06.2010    source источник
comment
Сноска для всех, кто борется с этим с другой платформы. параметр по размеру и форме прекрасно обрабатывается в Android; но это сложно найти. обычно требуется соответствие ширины родительскому элементу, обтекание по высоте, включение adjustViewBounds, scale fitToCenter и cropToPadding false. тогда это автоматически. Я очень надеюсь, что это кому-то поможет!   -  person Fattie    schedule 21.05.2014


Ответы (14)


Возможно, уже слишком поздно, но ради других, у кого есть такая же проблема, установить высоту ImageView:

imageView.getLayoutParams().height = 20;

Важно. Если вы устанавливаете высоту после того, как макет уже «выложен», убедитесь, что вы также вызываете:

imageView.requestLayout();
person Hakem Zaied    schedule 10.03.2011
comment
Если вы устанавливаете высоту после того, как макет уже «выложен», убедитесь, что вы вызываете image_view.requestLayout () - person Rhys Davis; 06.08.2013
comment
Ответ должен быть отредактирован, чтобы включить добавление @Skripi - person osolmaz; 20.03.2014
comment
что, если мне понадобится wrap_content? - person Francisco Corrales Morales; 26.12.2014
comment
@FranciscoCorralesMorales используют статические значения, определенные для LayoutParams - person andrea.rinaldi; 25.03.2015
comment
@FranciscoCorralesMorales используйте это для wrap_content image_view.getLayoutParams().height = RelativeLayout.LayoutParams.WRAP_CONTENT .. Если родительский элемент представления LinearLayout, замените RelativeLayout на него - person Sami Eltamawy; 05.05.2015
comment
мне нужно сначала requestLayout или после того, как макет был «выложен»? и составляет ли высота образца 20 в точках падения или в пикселях? - person Lendl Leyba; 25.08.2015
comment
ширина и высота в пикселях. - person Michael Garner; 26.08.2015
comment
Итак, как указать единицу? Как сказать, что это dp, а не sp и т. Д. - person Saeed Neamati; 03.09.2015
comment
@SaeedNeamati, это px. Чтобы преобразовать dp в px, используйте методы, например, в http://stackoverflow.com/questions/4605527/converting-pixels-to-dp. - person CoolMind; 10.08.2016
comment
Будущие читатели могут использовать this при программном создании представления. - person daka; 21.06.2018
comment
@SaeedNeamati выбирает его самостоятельно, когда размер прохода. Например: val dp = 30; TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, Resources.getSystem().displayMetrics) - person Yaroslav Ovdiienko; 31.03.2020

Если ваше изображение является динамическим, ответ, содержащий getLayout, завершится ошибкой с нулевым исключением.

В этом случае правильный способ:

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(100, 100);
iv.setLayoutParams(layoutParams);
person InvulgoSoft    schedule 26.03.2012
comment
если я введу этот код, мое изображение исчезнет. Почему? ImageView imgLogo = новый ImageView (это); imgLogo.setImageDrawable (логотип); LinearLayout.LayoutParams layoutParams = новый LinearLayout.LayoutParams (32,32); imgLogo.setLayoutParams (layoutParams); row.addView (imgLogo); - person Mustafa Güven; 28.05.2012
comment
Спасибо за этот ответ, поставил меня на правильный путь. Как добавленное примечание, LinearLayout должен быть установлен на родительский тип представления изображения. Например, если ваше изображение находится в галерее, вы должны использовать параметры макета галереи вместо LinearLayout, иначе у вас будут исключения при приведении. - person profexorgeek; 01.06.2012
comment
@ MustafaGüven У меня была та же проблема, что и у вас, когда мой ImageView исчезает. Уловка состоит в том, чтобы сделать часть макета (т.е. <this_part_here>.LayoutParams) такой же, как и у родительского элемента ImageView. Так, например, если вы поместили свой ImageView в TableRow в TableLayout, вы должны иметь его как TableRow.LayoutParams. - person user2323030; 03.12.2014
comment
чтобы уточнить пользователя ($ some_number) - ›вам нужно создать LayoutParams в соответствии с родительским элементом и установить их для дочернего элемента (imageView), также requestLayout () не делает ' кажется необходимым на момент написания - person Bamboomy; 24.06.2017
comment
lol, вы создаете новые параметры, плохой ответ, вы просто можете получить текущие, я имею в виду, что если вы это сделаете (создадите новые), вам даже не понадобится xml, а затем также программно создайте / добавьте изображение ... - person user924; 10.03.2018

Вот простой способ выполнить вашу задачу:

setContentView(R.id.main);    
ImageView iv = (ImageView) findViewById(R.id.left);
int width = 60;
int height = 60;
LinearLayout.LayoutParams parms = new LinearLayout.LayoutParams(width,height);
iv.setLayoutParams(parms);

и другой способ, если вы хотите указать размер экрана по высоте и ширине, используйте следующий код:

setContentView(R.id.main);    
Display display = getWindowManager().getDefaultDisplay();
ImageView iv = (LinearLayout) findViewById(R.id.left);
int width = display.getWidth(); // ((display.getWidth()*20)/100)
int height = display.getHeight();// ((display.getHeight()*30)/100)
LinearLayout.LayoutParams parms = new LinearLayout.LayoutParams(width,height);
iv.setLayoutParams(parms);

надеюсь использовать полный вам.

person duggu    schedule 17.12.2012
comment
Это отличная работа для меня !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Показать display = getWindowManager (). GetDefaultDisplay (); ImageView iv = (LinearLayout) findViewById (R.id.left); int width = display.getWidth (); // ((display.getWidth () * 20) / 100) int height = display.getHeight (); // ((display.getHeight () * 30) / 100) LinearLayout.LayoutParams parms = new LinearLayout.LayoutParams (width ,рост); iv.setLayoutParams (параметры); - person Selim Raza; 07.04.2019
comment
Почему люди объявляют int переменные, если они не будут использоваться где-либо еще? Кажется ненужным, но я мало что знаю об этом, tbh. - person n00dles; 11.05.2019
comment
просто для лучшего понимания @ n00dles ,,, ничего больше - person duggu; 07.06.2019

Я играл в этот с pixel и dp.

private int dimensionInPixel = 200;

Как установить по пикселю:

view.getLayoutParams().height = dimensionInPixel;
view.getLayoutParams().width = dimensionInPixel;
view.requestLayout();

Как установить с помощью dp:

int dimensionInDp = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dimensionInPixel, getResources().getDisplayMetrics());
view.getLayoutParams().height = dimensionInDp;
view.getLayoutParams().width = dimensionInDp;
view.requestLayout();

Надеюсь, это поможет вам.

person Hiren Patel    schedule 24.05.2016
comment
Как мне сделать это для определенного значения dp (т.е. без преобразования из px в dp)? - person alxcyl; 16.11.2016
comment
@Hiren, что означает getResources (). GetDisplayMetrics (), когда я читаю документ, это похоже на DisplayMetrics. Не могли бы вы объяснить мне немного вкратце. Я новичок в Android, спасибо. - person Srini; 30.03.2018
comment
Вызвано: java.lang.NullPointerException: попытка записи в поле int android.view.ViewGroup $ LayoutParams.height для ссылки на нулевой объект - person MD Khali; 06.09.2018

Если вам нужно установить ширину или высоту равными match_parent (размером с его родительский элемент) или wrap_content (достаточно большим, чтобы уместить его собственное внутреннее содержимое), тогда _ 3_ содержит две константы:

imageView.setLayoutParams(
    new ViewGroup.LayoutParams(
        // or ViewGroup.LayoutParams.WRAP_CONTENT
        ViewGroup.LayoutParams.MATCH_PARENT,      
        // or ViewGroup.LayoutParams.WRAP_CONTENT,     
        ViewGroup.LayoutParams.MATCH_PARENT ) );

Или вы можете установить их, как в ответе Хакема Зайеда:

imageView.getLayoutParams().width = ViewGroup.LayoutParams.MATCH_PARENT;
//...
person Omar    schedule 25.12.2015

Вы можете установить значение для всех случаев.

demoImage.getLayoutParams().height = 150;

demoImage.getLayoutParams().width = 150;

demoImage.setScaleType(ImageView.ScaleType.FIT_XY);
person tienanhcntt2    schedule 27.07.2016
comment
Вызвано: java.lang.NullPointerException: попытка записи в поле int android.view.ViewGroup $ LayoutParams.height для ссылки на нулевой объект - person MD Khali; 06.09.2018

Самый лучший и простой способ настроить кнопку динамически -

 Button index=new Button(this);
 int height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 45, getResources().getDisplayMetrics());             
 int width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 42, getResources().getDisplayMetrics());

Указанные выше высота и ширина указаны в пикселях px. 45 - высота в dp, а 42 - ширина в dp.

 index.setLayoutParams(new <Parent>.LayoutParams(width, height));

Так, например, если вы поместили свою кнопку в TableRow внутри TableLayout, вы должны иметь ее как TableRow.LayoutParams

 index.setLayoutParams(new TableRow.LayoutParams(width, height));
person Ali Kahoot    schedule 06.12.2015

Просто создайте объект LayoutParams и назначьте его своему imageView.

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(150, 150);
imageView.setLayoutParams(params);
person Zubair Akber    schedule 05.01.2016

image_view.getLayoutParams().height 

возвращает значение высоты в пикселях. Вам нужно сначала получить размеры экрана, чтобы правильно установить значения.

 Display display = context.getWindowManager().getDefaultDisplay();
 DisplayMetrics outMetrics = new DisplayMetrics();
 display.getMetrics(outMetrics);
 int screen_height = outMetrics.heightPixels;
 int screen_width = outMetrics.widthPixels;

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

 view.getLayoutParams().height = screen_height - 140;
 view.getLayoutParams().width = screen_width - 130 ;
person Vikas    schedule 01.10.2015

Чтобы программно установить ImageView и высоту, вы можете сделать

            //Makesure you calculate the density pixel and multiply it with the size of width/height
            float dpCalculation = getResources().getDisplayMetrics().density;
            your_imageview.getLayoutParams().width = (int) (150 * dpCalculation);

            //Set ScaleType according to your choice...
            your_imageview.setScaleType(ImageView.ScaleType.CENTER_CROP);
person BharathRao    schedule 01.04.2019

котлин

val density = Resources.getSystem().displayMetrics.density
view.layoutParams.height = 20 * density.toInt()
person William Hu    schedule 13.03.2020

image.setLayoutParams (новый ViewGroup.LayoutParams (ширина, высота));

пример:

image.setLayoutParams(new ViewGroup.LayoutParams(150, 150));
person Alireza pahlavani    schedule 14.10.2020

В сценарии, когда размер виджета необходимо установить программно, убедитесь, что соблюдены следующие правила.

  1. Установите LayoutParam для макета, в который вы добавляете это представление. В моем случае я добавляю к TableRow, поэтому мне пришлось сделать TableRow.LayoutParams
  2. Следуйте этому коду

final float scale = getResources().getDisplayMetrics().density; int dpWidthInPx = (int) (17 * scale); int dpHeightInPx = (int) (17 * scale);

TableRow.LayoutParams deletelayoutParams = new TableRow.LayoutParams(dpWidthInPx, dpHeightInPx); button.setLayoutParams(deletelayoutParams); tableRow.addView(button, 1);

person Rohit Mandiwal    schedule 21.12.2018

Если вы хотите просто подогнать изображение в представлении изображения, вы можете использовать свойство «обернуть содержимое» по высоте и ширине с типом шкалы, но если вы хотите установить вручную, вы должны использовать LayoutParams.

Layoutparams эффективен для программной установки высоты и ширины макета.

person raj kavadia    schedule 05.03.2019