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

0 xamarin.android

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

我希望能够设置诸如的属性

android:layout_alignParentBottom ="true"android:layout_alignParentRight ="true"android:layout_weight ="1"

但是我找不到任何关于如何在代码中执行此操作的文档或示例.是否可以使用当前版本的Mono for Android?

jon*_*onp 10

Mono for Android邮件列表中的相关主题.

许多构造函数采用IAttributeSet实例,因此(最坏情况),在调用例如RelativeLayout(Context,IAttributeSet)构造函数时,您始终可以通过该参数提供XML自定义属性.

资源属性在Java代码中专门处理,因此可能因类而异.例如,RelativeLayout构造函数实现.

因此,属性可以(并且将)特定于给定类型.例如,尽管我可以通过快速浏览Android源来判断,但是对于具有这两者android:layout_alignParentBottomandroid: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);
Run Code Online (Sandbox Code Playgroud)

这使用RelativeLayout.LayoutParams.AddRule方法来启用布局选项.该int转换是必要的,因为我们没有意识到AddRule()应该采取LayoutRules枚举; 哎呀.

以编程方式分配android:layout_alignParentRight属性:

p.AddRule ((int) LayoutRules.AlignParentRight);
Run Code Online (Sandbox Code Playgroud)

如上所述,似乎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;
Run Code Online (Sandbox Code Playgroud)