0

我无法找出如何在我的代码中设置布局属性。我的控件是在运行时生成的,所以我无法在我的 xml 中设置布局。

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

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

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

4

1 回答 1

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);

这使用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;
于 2011-04-28T02:11:10.057 回答