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: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;
于 2011-04-28T02:11:10.057 に答える