Mono for Android メーリング リストの関連スレッド。
コンストラクターの多くはIAttributeSetインスタンスを取るため、(最悪の場合) RelativeLayout(Context, IAttributeSet) コンストラクターなどを呼び出すときに、常にそのパラメーターを介して XML カスタム属性を提供できます。
リソース属性は特に Java コードで処理されるため、クラスによって異なる可能性があります。たとえば、RelativeLayout コンストラクターの実装です。
このため、属性は特定のタイプに固有である可能性があります (そしてそうなるでしょう)。たとえば、Android ソースをすばやく熟読してわかる限り、タイプが と の両方android:layout_alignParentBottom
のandroid:layout_weight
属性を持つことは有効ではありません。 Android:RelativeLayout
layout_alignParentBottom はタイプに固有のように見えますが、 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;