2011-02-24 31 views
58

我有一個相對佈局內包含的線性佈局。 它在XML文件中設置在另一個線性佈局的右側(此工作正常)。 在某些情況下,我想在活動的onCreate期間更改佈局的相對位置,所以我需要修改「右側」參數與另一個佈局相關的位置。 我tryed這一點:如何以編程方式刪除在XML中定義的現有規則?

RelativeLayout.LayoutParams layoutParams; 

    layoutParams = (RelativeLayout.LayoutParams) linearLayoutToMove 
      .getLayoutParams(); 
    layoutParams.addRule(RelativeLayout.RIGHT_OF, 
      R.id.new_ref_LinearLayout); 

但它不工作:O(

任何線索

回答

132

您不能刪除規則,因爲所有規則總是存儲在固定大小的java數組中。但是您可以將規則設置爲0。例如

layoutParams.addRule(RelativeLayout.RIGHT_OF, 0); 
layoutParams.addRule(RelativeLayout.BELOW, R.id.new_ref_LinearLayout); 

編輯(感謝Roger Rapid):

由於API級別17,類RelativeLayout.LayoutParams有以下方法:

public void removeRule(int verb) 

所以,你可以使用刪除規則以下代碼行:

layoutParams.removeRule(RelativeLayout.RIGHT_OF); 

,你會得到完全相同的結果爲「添加」零規則當:

layoutParams.addRule(RelativeLayout.RIGHT_OF, 0); 
+1

這正是我所做的。韓國社交協會。 – 2011-02-25 14:01:06

+6

從API級別17開始,類RelativeLayout.LayoutParams具有以下方法:public void removeRule(int verb) – 2013-03-06 15:47:13

+1

如何在API級別17之前爲應用程序做些什麼? :o – marienke 2014-01-24 07:15:16

0

下面的代碼添加到您現有的代碼

linearLayoutToMove.setLayoutParams(layoutParams)

我想這應該做的工作。如果上述行不工作,請嘗試撥打linearLayoutToMove.invalidate()上述行後

+0

因爲我在的onCreate,我並不需要調用無效()。 – 2011-02-24 18:52:43

3

我認爲你需要調用:

relativeLayout.updateViewLayout(linearLayoutToMove, layoutParams);

改變的LayoutParams後。

在回答編輯,您使用可以創建新的LayoutParameters:

LinearLayout.LayoutParams = new LinearLayout.LayoutParams(
    LinearLayout.LayoutParams.FILL_PARENT, 
    LinearLayout.LayoutParams.FILL_PARENT);

,然後添加新的規則。然後,使用前面提到的updateViewLayout()方法更新佈局參數。

+0

好的答案謝謝:) – Crowni 2015-12-20 08:49:02

相關問題