프로그래밍 방식으로 ImageView 너비와 높이를 설정 하시겠습니까?


643

ImageView의 너비와 높이를 프로그래밍 방식으로 설정하려면 어떻게 해야합니까?


4
이상하게 들리면이 정보를 찾기가 매우 어렵습니다. 이 질문은 더 많은지지를 받아야합니다.
phunehehe 2019

14
다른 플랫폼에서이 문제로 어려움을 겪고있는 사람을위한 각주. "적합의 크기와 모양" 옵션은 안드로이드에 아름답게 처리됩니다; 그러나 찾기가 어렵습니다. 일반적으로 너비 일치 부모, 높이 랩 내용, adjustViewBounds 설정 , fitToCenter 및 cropToPadding false 조정을 원합니다 . 그런 다음 자동입니다. 정말 도움이 되길 바랍니다!
Fattie

답변:


1100

너무 늦었지만 같은 문제가있는 다른 사람들을 위해 ImageView의 높이를 설정하기는 어렵습니다.

imageView.getLayoutParams().height = 20;

도움이 되었기를 바랍니다.

중대한. 레이아웃이 이미 '레이아웃'된 후 높이를 설정하는 경우 다음을 호출해야합니다.

imageView.requestLayout();

102
레이아웃이 이미 '레이아웃'된 후 높이를 설정하는 경우 image_view.requestLayout ()을 호출해야합니다.
Rhys Davis

9
wrap_content가 필요한 경우 어떻게합니까?
Francisco Corrales Morales

8
언젠가는 당신이 내 상사 였고 나는 아직도 당신에게서 배우고 있기 때문에 투표 Hakim :)
Sami Eltamawy

9
@FranciscoCorralesMorales는 wrap_content에 이것을 사용합니다 image_view.getLayoutParams().height = RelativeLayout.LayoutParams.WRAP_CONTENT.. 뷰 부모가 그것을 LinearLayout대체하는 RelativeLayout경우
Sami Eltamawy

39
따라서 단위 를 지정하는 방법은 무엇입니까? 어떻게 말을 그 그것의 DP 가 아닌 SP
사이드 Neamati

231

이미지 뷰가 동적이면 getLayout을 포함하는 응답은 null 예외와 함께 실패합니다.

이 경우 올바른 방법은 다음과 같습니다.

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(100, 100);
iv.setLayoutParams(layoutParams);

7
해당 코드를 넣으면 이미지가 사라집니다. 왜? ImageView imgLogo = 새로운 ImageView (this); imgLogo.setImageDrawable (로고); LinearLayout.LayoutParams layoutParams = 새로운 LinearLayout.LayoutParams (32,32); imgLogo.setLayoutParams (layoutParams); row.addView (imgLogo);
Mustafa Güven

3
이 답변에 감사드립니다. 올바른 길로 안내하십시오. 참고로 LinearLayout은 이미지의 부모보기 유형으로 설정해야합니다. 예를 들어 이미지보기가 갤러리에있는 경우 LinearLayout 대신 갤러리 레이아웃 매개 변수를 사용해야합니다. 그렇지 않으면 캐스팅 예외가 발생합니다.
profexorgeek

3
@ MustafaGüven 나는 당신과 같은 문제를 겪었습니다 ImageView. 요령은 레이아웃 부분 (즉, <this_part_here>.LayoutParams)을 부모의 것과 동일 하게 만드는 것 ImageView입니다. 따라서 예를 들어, 당신이 당신을 배치 한 경우 ImageViewTableRow내에서 TableLayout, 당신은 그것을로해야한다 TableRow.LayoutParams.
user2323030 December

사용자 ($ some_number)에 정교 -> 당신이 할 필요가 생성 부모 따라의 LayoutParams 및 설정 아이합니다 (이미지 뷰)에 그들을 또한 requestLayout는 () 작성시 필요하지 않는 것
Bamboomy

LOL 당신은 새로운 매개 변수, 나쁜 답변을 만들 수 있습니다, 당신은 단지 현재의 것들을 얻을 수 있습니다, 당신이 그것을 할 경우 (새로운 것을 만들) 다음 XML을 필요로하지 않고 또한 프로그래밍 방식으로
이미지 뷰를

52

작업을 수행하는이 간단한 방법 :

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);

희망은 당신에게 가득합니다.


이것은 나를 위해 훌륭한 일입니다 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 디스플레이 표시 = 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 (parms);
Selim Raza

사람들이 int다른 곳에서 재사용하지 않으면 왜 변수를 선언 합니까? 불필요한 것 같지만 나는 그것에 대해 많이 모른다.
n00dles

1
@ n00dles를 더 잘 이해하기 위해, 아무것도,
duggu

36

나는이 일을했다 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();

이것이 도움이되기를 바랍니다.


1
특정 dp 값에 대해 어떻게해야합니까 (즉, px에서 dp로 변환하지 않습니까)?
alxcyl

@Hiren 문서를 읽을 때 getResources (). getDisplayMetrics ()의 의미는 DisplayMetrics 인 것 같습니다. 조금만 설명해 주시겠습니까? 나는 안드로이드를 처음 사용합니다. 감사합니다.
Srini

원인 : java.lang.NullPointerException : null 객체 참조에서 필드 'int android.view.ViewGroup $ LayoutParams.height'에 쓰려고 시도
MD Khali

16

너비 또는 높이를 match_parent(부모만큼 큰) 또는 wrap_content(자체 내부 내용에 맞게 충분히 크게 ) 설정 해야하는 ViewGroup.LayoutParams경우이 두 상수가 있습니다.

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

또는 Hakem Zaied의 답변 과 같이 설정할 수 있습니다 .

imageView.getLayoutParams().width = ViewGroup.LayoutParams.MATCH_PARENT;
//...

11

모든 경우에 대한 값을 설정할 수 있습니다.

demoImage.getLayoutParams().height = 150;

demoImage.getLayoutParams().width = 150;

demoImage.setScaleType(ImageView.ScaleType.FIT_XY);

1
원인 : java.lang.NullPointerException : null 객체 참조에서 필드 'int android.view.ViewGroup $ LayoutParams.height'에 쓰려고 시도
MD Khali

8

버튼을 동적으로 설정하는 가장 쉽고 쉬운 방법은

 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());

위의 높이와 폭은 픽셀에 픽셀 . 45는 dp 의 높이 이고 42는 dp 의 너비입니다 .

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

예를 들어, TableLayout 내의 TableRow 내에 버튼을 배치 한 경우 TableRow.LayoutParams로 설정해야합니다.

 index.setLayoutParams(new TableRow.LayoutParams(width, height));

8

LayoutParams 객체를 만들어 imageView에 할당하기 만하면됩니다.

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(150, 150);
imageView.setLayoutParams(params);

5
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 ;

3

프로그래밍 방식으로 ImageView 및 Height를 설정하려면

            //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);

2

코 틀린

val density = Resources.getSystem().displayMetrics.density
view.layoutParams.height = 20 * density.toInt()

1

위젯 크기를 프로그래밍 방식으로 설정해야하는 시나리오에서 아래 규칙을 확인하십시오.

  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);


1
나는 이것을 좋아한다. 나는 그것을 사용하고 있습니다! 감사.
n00dles

0

이미지를 이미지보기에 맞추려면 scale type으로 height 및 width 속성에서 "content wrap"을 사용할 수 있지만 수동으로 설정하려면 LayoutParams를 사용해야합니다.

Layoutparams는 프로그래밍 방식으로 레이아웃 높이와 너비를 설정하는 데 효율적입니다.


0
int newHeight = 150;
            int newWidth = 150; 
            holder.iv_arrow.requestLayout();
            holder.iv_arrow.getLayoutParams().height = newHeight;
            holder.iv_arrow.getLayoutParams().width = newWidth;
            holder.iv_arrow.setScaleType(ImageView.ScaleType.FIT_XY);
            holder.iv_arrow.setImageResource(R.drawable.video_menu);
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.