我無法找到如何在代碼中設置佈局屬性。 我的控件正在運行時生成,所以我無法在我的xml中設置佈局。在運行時在代碼中設置佈局屬性
我想能夠設置性能如
機器人:layout_alignParentBottom = 「真」 機器人:layout_alignParentRight = 「真」 機器人:layout_weight = 「1」
但是我不能找到有關如何在代碼中執行此操作的任何文檔或示例。 目前版本的Mono for Android有可能嗎?
我無法找到如何在代碼中設置佈局屬性。 我的控件正在運行時生成,所以我無法在我的xml中設置佈局。在運行時在代碼中設置佈局屬性
我想能夠設置性能如
機器人:layout_alignParentBottom = 「真」 機器人:layout_alignParentRight = 「真」 機器人:layout_weight = 「1」
但是我不能找到有關如何在代碼中執行此操作的任何文檔或示例。 目前版本的Mono for Android有可能嗎?
Relevant thread on the Mono for Android mailing list.
許多建設者採取IAttributeSet實例,因此(最壞情況),你總是可以提供通過參數調用例如當XML自定義屬性RelativeLayout(Context, IAttributeSet) constructor。
資源屬性在Java代碼中專門處理,因此可能因類而異。例如,RelativeLayout constructor implementation。
因此,屬性可以(也將是)特定於給定類型。例如,儘管我可以從快速瀏覽Android源中得到最好的結果,但對於同時具有android:layout_alignParentBottom
和android:layout_weight
屬性的類型無效,因爲android:layout_alignParentBottom看起來特定於RelativeLayout
類型,而android:layout_weight特定於LinearLayout,並且在那裏在RelativeLayout
和LinearLayout
之間沒有繼承關係。
這就是說,以編程方式分配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;