2011-04-27 3 views
0

Je n'arrive pas à trouver comment définir les propriétés de disposition dans mon code. Mes contrôles sont générés lors de l'exécution, donc je ne peux pas définir la mise en page dans mon fichier XML.Définition des propriétés de disposition dans le code au moment de l'exécution

Je voudrais être en mesure de définir des propriétés telles que

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

Cependant, je peux » t trouver toute documentation ou des exemples sur la façon de le faire dans le code. Est-il possible avec la version actuelle de Mono pour Android?

Répondre

10

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; 
Questions connexes