2011-09-23 62 views
3

我必須以編程方式執行此操作。所以,忍受我。爲什麼您必須爲您放入視圖中的每個元素創建一組新的RelativeLayout.LayoutParams?

我有文本和兩個按鈕,我設置爲彼此對齊。因此,我爲每個實例創建了一個新的RelativeLayout.LayoutParams實例,並添加了一條規則將其設置爲彼此之下。這工作,我很高興。

我的問題是:爲什麼我必須創建一個新實例才能讓佈局以這種方式顯示它們?有沒有什麼辦法可以減少下面的代碼,使它不那麼重複(除了編寫我自己的私有方法來幹掉它)我想知道是否有辦法用更少的代碼行來完成同樣的事情可能在Android SDK中被忽略)?我必須不斷爲每個元素創建一個新的RelativeLayout.LayoutParams實例嗎?

layout = new RelativeLayout(this); 
layout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); 

text = new TextView(this); 
text.setId(1); 
text.setText("This is text"); 
layout.addView(text); 

myButton1 = new Button(this); 
myButton1.setId(2) 
myButton1.setOnClickListener(this); 
RelativeLayout.LayoutParams buttonParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
buttonParams.addRule(RelativeLayout.BELOW, text.getId()); 
layout.addView(myButton1, buttonParams); 

myButton2 = new Button(this); 
myButton2.setId(3) 
myButton2.setOnClickListener(this); 
buttonParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
buttonParams.addRule(RelativeLayout.BELOW, myButton1.getId()); 
layout.addView(myButton2, buttonParams); 

回答

1

不幸的是,(至少根據API)爲RelativeLayout.LayoutParams沒有removeRule()方法,所以你必須創建一個新的LayoutParams對象每次。

我傾向於贊同@jeffamaphone,您應該更喜歡xml佈局而不是以編程方式設置佈局。即使不將整個佈局放入xml中,也應該使用資源ID(請參閱doc以獲取詳細信息)來設置項目的ID。這將保證一個唯一的ID。

+1

謝謝,諾埃爾。我只是想確保我沒有任何理由沒有做太多的事情。不幸的是,我*有*以編程方式(無XML)執行任何操作。 (我沒有制定規則。) – user5243421

0

您可以設置添加到任何虛假規則使用0

buttonParams.addRule(RelativeLayout.BELOW, 0); 
相關問題