Xamarin.android 在运行时在代码中设置布局属性

Xamarin.android 在运行时在代码中设置布局属性,xamarin.android,Xamarin.android,我很难找到如何在代码中设置布局属性。 我的控件是在运行时生成的,因此我无法在xml中设置布局 我希望能够设置属性,例如 android:layout\u alignParentBottom=true android:layout\u alignParentRight=true android:layout_weight=1 然而,我找不到任何关于如何在代码中实现这一点的文档或示例。 当前版本的Android Mono有可能吗 许多构造函数都有一个实例,所以在最坏的情况下,在调用例如时,您总是可以

我很难找到如何在代码中设置布局属性。 我的控件是在运行时生成的,因此我无法在xml中设置布局

我希望能够设置属性,例如

android:layout\u alignParentBottom=true android:layout\u alignParentRight=true android:layout_weight=1

然而,我找不到任何关于如何在代码中实现这一点的文档或示例。 当前版本的Android Mono有可能吗

许多构造函数都有一个实例,所以在最坏的情况下,在调用例如时,您总是可以通过该参数提供XML自定义属性

资源属性是在Java代码中专门处理的,因此可能因类而异。比如,

因此,属性可以并且将特定于给定的类型。例如,从快速阅读Android源代码可以看出,一个类型同时具有Android:layout\u alignParentBottom和Android:layout\u weight属性是无效的,这似乎是特定于RelativeLayout类型的,而特定于,RelativeLayout和LinearLayout之间没有继承关系

也就是说,要以编程方式分配android:layout\u 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);
这将使用该方法启用布局选项。int cast是必要的,因为我们没有意识到AddRule应该采用LayoutRules枚举;哎呀

要以编程方式指定android:layout\u alignParentRight属性,请执行以下操作:

p.AddRule ((int) LayoutRules.AlignParentRight);
// 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;
如上所述,它似乎是特定于LinearLayout的,因此我们不能使用RelativeLayout.LayoutParams来设置它。相反,我们需要使用LinearLayout.LayoutParams来设置属性:

p.AddRule ((int) LayoutRules.AlignParentRight);
// 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;