2010-05-31 9 views
21

Mi piacerebbe sapere se esiste un modo per chiamare la proprietà android:layout_gravity da un metodo Java. Non ho trovato alcun metodo nella documentazione di Android per farlo. Questa è l'immagine del layout Voglio realizzare:Metodo Java per Android: layout_gravity

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

so di farlo attraverso XML, come segue:

<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> 

Ma nella mia situazione, ho bisogno di farlo attraverso Codice Java, perché implementerò altre viste di layout in modo dinamico. Per evitare di unire il layout XML con il codice Java, preferirei realizzare tutto il layout usando Java.

+1

btw qui non sarebbe necessario contrassegnare comunità wiki;) – RoflcoptrException

risposta

29

Beh, per quanto ho capito in cerca di una this E 'per FrameLayout per altri layout di leggere la classi LayoutParams. Per impostare la gravità come nel tuo XML uso qualcosa di simile:

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

seguita da addView con nuova costruzione LayoutParams

+0

Nice !!! Grazie Nikolay! =) –

+3

thre is no CENTRAL_VERTICAL, dovrebbe essere [CENTER_VERTICAL] (http://developer.android.com /reference/android/view/Gravity.html) –

+0

E WRAP_CONTENT deve essere 'ViewGroup.LayoutParams.WRAP_CONTENT' –

2
+4

Purtroppo questa è la forza di gravità per il testo all'interno del TextView, non la gravità per il layout di TextView stesso. –

+0

puoi anche usarlo per il pulsante. il pulsante lo eredita. –

+0

Sì, Steve. = (Sfortunatamente questa è la gravità del testo, la stessa di Android: gravità –

2

Watchout! Questo però non funzionerebbe con LinearLayout. Poiché il costruttore LinearLayout.LayoutParams (...) è diverso dal costruttore FrameLayout.LayoutParams (...). Il terzo parametro non è la gravità ma il peso.

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

al contrario di

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

e questa chiamata, nonostante non produce errore del compilatore è in realtà sbagliata:

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

Anche se non puoi impostare la gravità tramite il costruttore ma il campo di gravità del LinearLayout.LayoutParams è pubblico così puoi usa la gravità da lì –

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

layout_gravity non è la stessa cosa della gravità. La gravità è la gravità dei tuoi figli. Layout gravity stai dicendo al tuo layout genitore ciò che vuoi che sia la tua gravità. – MinceMan

1

per modificare l'attributo layout_gravity per uno già esistente visualizza:

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); 

Il pulsante è contenuto in un FrameLayout che ha un attributo gravity corrispondente all'attributo layout_gravity XML. Documentation link.

-1

prima di aggiungere il pulsante, si dovrebbe modificare l'orientamento del layout

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

come risponde alla domanda? –