我无法找到如何在代码中设置布局属性。 我的控件是在运行时生成的,因此我无法在xml中设置布局。
我希望能够设置
等属性机器人:layout_alignParentBottom = “真” 机器人:layout_alignParentRight = “真” 机器人:layout_weight = “1”
但是我找不到任何关于如何在代码中执行此操作的文档或示例。 是否可以使用当前版本的Mono for Android?
答案 0 :(得分:10)
Relevant thread on the Mono for Android mailing list.
许多构造函数采用IAttributeSet实例,因此(最坏的情况),在调用例如{0}}时,您始终可以通过该参数提供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方法启用布局选项。 int
强制转换是必要的,因为我们没有意识到AddRule()
应该使用LayoutRules
枚举;糟糕。
以编程方式分配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;