2010-05-31 4 views
21

Je voudrais savoir s'il existe un moyen d'appeler la propriété android:layout_gravity à partir d'une méthode Java. Je n'ai trouvé aucune méthode dans la documentation Android pour le faire. Telle est l'image de la mise en page que je veux mettre en œuvre:Méthode Java pour android: layout_gravity

http://www.anddev.org/resources/image/2234

Je sais le faire par XML, comme suit:

<FrameLayout 
    xlmns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"> 

     <Button 
     android:layout_gravity="left|center_vertical" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="<" /> 


     <Button 
     android:layout_gravity="right|center_vertical" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text=">" /> 
</FrameLayout> 

Mais dans ma situation, je dois le faire par Code Java, car je vais implémenter d'autres vues de manière dynamique. Pour éviter de fusionner la mise en page XML avec du code Java, je préférerais faire toute la mise en page en utilisant Java.

+1

BTW ici, il ne serait pas nécessaire de marquer wiki communautaire;) – RoflcoptrException

Répondre

29

bien pour autant que je comprends la recherche de this Il est pour FrameLayout pour d'autres classes de mise en page voir LayoutParams appropriées. Pour régler la gravité comme dans votre utilisation XML quelque chose comme:

FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT,Gravity.LEFT | Gravity.CENTER_VERTICAL) 

suivie addView avec nouvellement construit LayoutParams

+0

Nice !!! Merci Nikolay! =) –

+3

thre est pas CENTRAL_VERTICAL, il devrait être [CENTER_VERTICAL] (http://developer.android.com /reference/android/view/Gravity.html) –

+0

Et WRAP_CONTENT devrait être 'ViewGroup.LayoutParams.WRAP_CONTENT' –

2
+4

Malheureusement, c'est la gravité du texte dans le TextView, pas la gravité pour la mise en page de la TextView lui-même. –

+0

vous pouvez également l'utiliser pour le bouton. le bouton en hérite –

+0

Oui, Steve. = (Malheureusement, c'est la gravité pour le texte, la même chose d'android: la gravité –

2

Watchout! Cela ne fonctionnerait pas avec LinearLayout cependant. Parce que le constructeur LinearLayout.LayoutParams (...) est différent du constructeur FrameLayout.LayoutParams (...). Le troisième paramètre n'est pas la gravité mais le poids.

 LinearLayout.LayoutParams(int width, int height, float weight) 

par opposition à

 FrameLayout.LayoutParams(int width, int height, int gravity) 

et cet appel, malgré ne produisant pas erreur de compilation est en fait mal:

lparams = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, Gravity.LEFT); 
+0

Bien que vous cant définir la gravité par le constructeur, mais le champ de gravité des LinearLayout.LayoutParams est publique afin que vous puissiez utiliser la gravité à partir de là –

1
button.setBackgroundResource(R.drawable.sound_on); 
     button.setText("On"); 
     button.setGravity(Gravity.CENTER_VERTICAL| Gravity.RIGHT); 
     button.invalidate(); 
+0

layout_gravity n'est pas la même chose que la gravité. La gravité est la gravité de vos enfants. La gravité de la mise en page vous dit ce que vous voulez que votre gravité soit. – MinceMan

1

Pour modifier l'attribut layout_gravity pour un existant voir:

Button button = (Button) findViewById(R.id.some_button); 
FrameLayout.LayoutParams params; 
params = (LayoutParams) button.getLayoutParams(); 

params.gravity = Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL; 
button.setLayoutParams(params); 

Le bouton est contenu dans un FrameLayout qui a un attribut gravity correspondant à l'attribut XML layout_gravity. Documentation link.

-1

avant d'ajouter le bouton, vous devez changer l'orientation de votre mise en page

yourbutton.setGravity(Gravity.RIGHT); 
LayoutParams layout = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, Gravity.RIGHT); 
layout.gravity = Gravity.RIGHT; 
yourbutton.setLayoutParams(layout); 


yourlayout.setGravity(Gravity.RIGHT); 
yourlayout.addView(yourbutton); 
+0

Comment est-ce que cela répond à la question? –