我无法找出如何在我的代码中设置布局属性。我的控件是在运行时生成的,所以我无法在我的 xml 中设置布局。
我希望能够设置属性,例如
android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:layout_weight="1"
但是我找不到任何关于如何在代码中执行此操作的文档或示例。当前版本的 Mono for Android 是否可行?
我无法找出如何在我的代码中设置布局属性。我的控件是在运行时生成的,所以我无法在我的 xml 中设置布局。
我希望能够设置属性,例如
android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:layout_weight="1"
但是我找不到任何关于如何在代码中执行此操作的文档或示例。当前版本的 Mono for Android 是否可行?
许多构造函数采用IAttributeSet实例,因此(最坏的情况)在调用例如RelativeLayout(Context, IAttributeSet) 构造函数时,您始终可以通过该参数提供 XML 自定义属性。
资源属性在 Java 代码中专门处理,因此可能会因一个类而异。例如,RelativeLayout 构造函数实现。
因此,属性可以(并且将是)特定于给定类型。例如,从快速阅读 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.Weight属性LinearLayout.LayoutParams
来设置:
// 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;