Relevant thread on the Mono for Android mailing list.
Beaucoup des constructeurs prennent une instance IAttributeSet, donc (pire cas), vous pouvez toujours fournir la coutume XML attributs par ce paramètre lors de l'appel du par exemple . Les attributs de ressources sont gérés spécifiquement dans le code Java et peuvent donc varier d'une classe à l'autre. Par exemple, le RelativeLayout constructor implementation. Pour cette raison, les attributs peuvent (et seront) spécifiques à un type donné. Par exemple, le mieux que je puisse dire de parcourir rapidement la source Android, il n'est pas valide pour un type d'avoir les attributs android:layout_alignParentBottom
et android:layout_weight
, car android:layout_alignParentBottom semble être spécifique au type RelativeLayout
, alors que android:layout_weight est spécifique à LinearLayout, et là est aucune relation d'héritage entre RelativeLayout
et LinearLayout
.
Cela dit, d'attribuer la propriété android:layout_alignParentBottom
programme, il semble que vous voulez faire:
// 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);
Cette méthode utilise la RelativeLayout.LayoutParams.AddRule pour activer l'option de mise en page. La distribution int
est nécessaire car nous n'avons pas réalisé que AddRule()
devrait prendre un LayoutRules
enum; Oops.
Pour attribuer programmation la propriété android:layout_alignParentRight
:
p.AddRule ((int) LayoutRules.AlignParentRight);
Comme il est indiqué ci-dessus, il semble que android:layout_weight est spécifique à LinearLayout
, donc nous ne pouvons pas utiliser RelativeLayout.LayoutParams
pour régler cela. Au lieu de cela, nous devons utiliser LinearLayout.LayoutParams
pour définir la propriété 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;