2010-06-29 211 views
506

如何以編程方式設置ImageView的寬度和高度?以編程方式設置ImageView寬度和高度?

+4

奇怪的是,這個信息很難找到。這個問題值得更多的讚揚。 – phunehehe 2012-02-24 07:16:04

+12

任何人都爲來自另一個平臺而掙扎的腳註。 **「適合尺寸和形狀」**選項在Android中處理得非常漂亮;但很難找到。您通常希望寬度匹配父,高度換行內容,** adjustViewBounds打開**,縮放** fitToCenter **和cropToPadding ** false **。那麼它是自動的。我真的希望它能幫助別人! – Fattie 2014-05-21 07:38:24

+1

@JoeBlow - 謝謝你!您爲我節省了很多時間 – mango 2015-02-24 08:49:33

回答

864

它可能爲時已晚,但對於其他人誰也有同樣問題的緣故,要設置的ImageView的高度:

image_view.getLayoutParams().height = 20; 

希望這有助於。

重要。如果你設置的高度後佈局已經「佈局」,請確保您也稱:

image_view.requestLayout() 
+86

如果您在佈局已經「佈置」之後設置高度,請確保您調用image_view.requestLayout() – 2013-08-06 16:10:43

+1

答案應該被編輯以包含由@Skripi的附錄 – hosolmaz 2014-03-19 23:19:50

+5

如果我需要wrap_content呢? – 2014-12-26 20:30:23

185

如果你的圖像視圖是動態的,含getLayout將失敗,空異常的答案。

在這種情況下,正確的方法是:

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

如果我把這個代碼我的圖像消失。爲什麼?\t \t \t \t ImageView的imgLogo =新ImageView的(本); \t \t \t \t \t \t \t \t imgLogo.setImageDrawable(標識); \t \t \t \t LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(32,32); \t \t \t \t imgLogo.setLayoutParams(的LayoutParams); \t row.addView(imgLogo); – 2012-05-27 22:40:43

+2

感謝這個答案,讓我走上正軌。作爲補充說明,應將LinearLayout設置爲圖像的父視圖類型。例如,如果您的圖像視圖位於圖庫中,則應該使用圖庫佈局參數而不是LinearLayout,否則您將會投射異常。 – dubj 2012-06-01 18:34:41

+3

@MustafaGüven我有同樣的問題,因爲你,我的'ImageView'消失。關鍵是使佈局部分(即,' .LayoutParams')是相同的什麼'ImageView'的父是。因此,舉例來說,如果你放在'TableLayout'內的'TableRow'內你'ImageView',你應該有它的'TableRow.LayoutParams'。 – user2323030 2014-12-03 05:35:48

40

這種簡單的方式做你的任務:如果你想給屏幕尺寸在高度和寬度,然後使用

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

希望對你充滿希望。

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

後你在屏幕尺寸,你可以使用適當的利潤設置ImageView的寬度&高度。

view.getLayoutParams().height = screen_height - 140; 
view.getLayoutParams().width = screen_width - 130 ; 
7

設置一個按鈕的最佳和最簡單的方法是動態地

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中的寬度。因此,例如,如果您已將按鈕放置在TableLayout的TableRow中,則應將其作爲TableRow。的LayoutParams

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

如果您需要在您的寬度或高度設置爲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的answer

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

osm .... ................... – 2017-12-20 07:43:02

4

只需創建一個對象的LayoutParams並將其分配給您的ImageView的

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

我打了這一個與pixeldp

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

希望這會幫助你

private int dimensionInPixel = 200; 

如何通過像素設置。

+1

我將如何爲特定的DP值(即不是從像素轉換成DP)做到這一點? – alxcyl 2016-11-16 05:08:42

4

您可以爲所有情況設置值。

demoImage.getLayoutParams().height = 150; 

demoImage.getLayoutParams().width = 150; 

demoImage.setScaleType(ImageView.ScaleType.FIT_XY); 
相關問題