2011-03-23 211 views
8

所以,假設我想在相對佈局內以編程方式創建多個TextView。它看起來像每一個新的TextView我還可以創建一個新的LayoutParams像這樣:每個新視圖都需要一個新的layoutparams嗎?

RelativeLayout.LayoutParams p = new RelativeLayout.LayoutParams(
         ViewGroup.LayoutParams.WRAP_CONTENT, 
         ViewGroup.LayoutParams.WRAP_CONTENT); 

然後,添加我想用什麼規則:

p.addrule(...,...); 

看來,我不能用這個單一的LayoutParams爲多個TextView設置規則。這是一個真實的陳述嗎?

感謝,

回答

6

對於多個視圖使用相同的LayoutParams是好的,模塊注意在視圖通過佈局之前更改LayoutParams會將更改應用於所有視圖。

如果您只是想保存代碼,那麼您可以查看LayoutParams的copy constructor。這使您可以從另一個LayoutParams中的數據創建新的LayoutParams,而不必將兩個引用到相同的LayoutParams實例。

1

如果你給同一個對象的LayoutParams多個TextViews,他們將共享所有的設置。這意味着如果您更改了某些內容,則更改將應用​​於所有TextView。一般來說,您會希望爲每個TextView使用不同的實例。

2

創造和建設的正確的LayoutParams實例後,你可以用它在父每個View:

view1.setLayoutParams(params0); 

如果你想有(你想要的,我認爲)則params的獨立副本,可以改變它:

RelativeLayout.LayoutParams params=new RelativeLayout.LayoutParams(params0); 
view1.setLayoutParams(params); 
+0

有趣的旁註:該CopyConstructor將只複製高度和寬度,因爲它是ViewGroup.RelativeLayouts CopyConstructor。在API 19之上,你可以調用''new RelativeLayout.LayoutParams((RelativeLayout.LayoutParams)params0)''tto也複製指定的邊距和規則。 – katzenhut 2014-05-15 09:39:39

+0

我的解決方案; http://stackoverflow.com/a/29664367/938427 – hungtdo 2015-04-16 02:33:50

相關問題