Соответствующая тема в списке рассылки Mono for Android.
Многие из конструкторов принимают экземпляр IAttributeSet , поэтому (в худшем случае) вы всегда можете предоставить пользовательские атрибуты XML через этот параметр при вызове, например, Конструктор RelativeLayout (Context, IAttributeSet) .
Атрибуты ресурса обрабатываются конкретно в коде Java и, таким образом, потенциально могут варьироваться от одного класса к другому. Например, реализация конструктора RelativeLayout .
Из-за этого атрибуты могут (и будут) быть специфичными для данного типа. Например, насколько я могу судить по быстрому просмотру источника Android, недопустимо, чтобы тип имел атрибуты android:layout_alignParentBottom
и android:layout_weight
, поскольку android: layout_alignParentBottom , по-видимому, специфичен для RelativeLayout
type, тогда как 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;