2012-04-15 50 views
39

這是我的看法,我希望將layout_width更改爲「10dip」。我如何以編程方式執行此操作? 請注意,這不是線性佈局,而是視圖。Android視圖layout_width - 如何以編程方式更改?

<View android:id="@+id/nutrition_bar_filled" 
    android:background="@drawable/green_rectangle" 
    android:layout_height="30dip" 
    android:layout_width="50dip"> 
</View> 

我知道LayoutParams。我如何使用它將寬度設置爲10dip?

回答

113

我相信你的問題是動態改變的觀點僅寬度,而上述方法將徹底改變佈局屬性,以新的,所以我建議首先從視圖中獲取LayoutParams,然後在layoutParmas上設置寬度,最後將layoutparams設置爲視圖,所以按照以下步驟進行操作。

View view_instance = (View)findViewById(R.id.nutrition_bar_filled); 
LayoutParams params=view_instance.getLayoutParams(); 
params.width=newOne; 
view_instance.setLayoutParams(params); 
+12

你也可以只做「view_instance.getLayoutParams()。width = newOne;」 – 2015-05-26 18:49:36

+8

以獲得像'match_parent'這樣的值,這個作品:'LayoutParams.MATCH_PARENT' – gnB 2016-11-04 04:50:22

+0

@TonyWickham它是如何工作的? – snayde 2017-03-01 17:11:21

8

嘗試使用

View view_instance = (View)findViewById(R.id.nutrition_bar_filled); 
view_instance.setWidth(10); 

使用Layoutparams這樣做,你可以設置寬度和高度如下圖所示。

LayoutParams lp = new LayoutParams(10,LayoutParams.wrap_content); 
View_instance.setLayoutParams(lp); 
+0

你能澄清?我幾乎準備好將您標記爲正確的答案。我如何得到view_instance? – 2012-04-15 04:16:56

+0

@Hisoka使用'findViewById(R.id.nutrition_bar_filled)'來獲得視圖 – 2012-04-15 04:18:06

+0

這是我第一次嘗試。看起來非常直觀,但setWidth對視圖來說不是一個有效的功能。查看filledBar = rowView.findViewById(R.id.nutrition_bar_filled); filledBar.setWidth(10)< - 無效。 – 2012-04-15 04:19:58

10

您可以設置高度和寬度這樣也:

viewinstance.setLayoutParams(new LayoutParams(width, height)); 
+8

我認爲這是錯誤的做法,它會失去已設置的任何其他佈局屬性,例如layout_gravity – mwk 2014-01-17 19:52:52

3

或者乾脆:

view.getLayoutParams().width = 400; 
view.requestLayout(); 
相關問題