2011-04-27 40 views
0

我無法找到如何在代碼中設置佈局屬性。 我的控件正在運行時生成,所以我無法在我的xml中設置佈局。在運行時在代碼中設置佈局屬性

我想能夠設置性能如

機器人:layout_alignParentBottom = 「真」 機器人:layout_alignParentRight = 「真」 機器人:layout_weight = 「1」

但是我不能找到有關如何在代碼中執行此操作的任何文檔或示例。 目前版本的Mono for Android有可能嗎?

回答

10

Relevant thread on the Mono for Android mailing list.

許多建設者採取IAttributeSet實例,因此(最壞情況),你總是可以提供通過參數調用例如當XML自定義屬性RelativeLayout(Context, IAttributeSet) constructor

資源屬性在Java代碼中專門處理,因此可能因類而異。例如,RelativeLayout constructor implementation

因此,屬性可以(也將是)特定於給定類型。例如,儘管我可以從快速瀏覽Android源中得到最好的結果,但對於同時具有android:layout_alignParentBottomandroid:layout_weight屬性的類型無效,因爲android:layout_alignParentBottom看起來特定於RelativeLayout類型,而android:layout_weight特定於LinearLayout,並且在那裏在RelativeLayoutLinearLayout之間沒有繼承關係。

這就是說,以編程方式分配android:layout_alignParentBottom財產,它看起來就像你想做的事:

// Get a RelativeLayout.LayoutParams instance 
// Option 1, if you have an existing RelativeLayout instance already: 
var p = (RelativeLayout.LayoutParams) layout.LayoutParameters; 

// Option 2: if you don't. 
var p = new RelativeLayout.LayoutParams (context, null); 

// Enable layout_alignParentBottom: 
p.AddRule ((int) LayoutRules.AlignParentBottom); 

它使用RelativeLayout.LayoutParams.AddRule方法來啓用佈局選項。因爲我們沒有意識到AddRule()應該採用LayoutRules枚舉,所以int需要鑄造;哎呀。

要以編程方式分配android:layout_alignParentRight屬性:

p.AddRule ((int) LayoutRules.AlignParentRight); 

如上所述,看來android:layout_weight特定於LinearLayout,所以我們不能用RelativeLayout.LayoutParams設置此。相反,我們需要使用LinearLayout.LayoutParams來設置LinearLayout.LayoutParams.Weight屬性:

// Just like before, but get a LinearLayout.LayoutParams instance 
// Option 1, if you have an existing LinearLayout instance already: 
var p = (LinearLayout.LayoutParams) layout.LayoutParameters; 

// Option 2: if you don't. 
var p = new LinearLayout.LayoutParams (context, null); 

// Enable layout_weight: 
p.Weight = 1.0f; 
相關問題