2012-04-14 16 views
6

Sono bloccato su un problema e non so, cosa lo causa. Ho un layout semplice come questo:TextView setGravity() non funziona in java

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:orientation="vertical"> 
<TextView 
    android:id="@+id/my_text_view" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:layout_gravity="NOTE_THIS" 
    android:textColor="#FFFFFF" 
    android:textSize="22dp" 
    android:text="TestText"/> 
</LinearLayout> 

che è incluso all'interno di un altro layout. Se cambio la gravità all'interno dell'xml, vedo lo stesso risultato nell'editor di layout e sul mio telefono. Se voglio applicare Gravity in modo programmatico come con myTextView.setGravity(Gravity.CENTER), non cambia nulla. E non posso impostare LayoutGravity in Java su TextView

Ho provato a fare il debug per includerli tre volte ciascuno con un'altra gravità che funziona anche. Quindi presumo che tutto sia a posto con il mio layout e che ci debba essere un bug o qualcos'altro che mi manca. Qualcuno può darmi un suggerimento su cosa posso provare, o su cosa causa questo problema?

risposta

24

impostare la larghezza del vostro TextView come android:layout_width="fill_parent" allora è possibile impostare a livello di codice utilizzando myTextView.setGravity(Gravity.CENTER)

+0

come posso ottenere The intrinsicWidth di TextView dopo averlo dato "fill_parent", perché getWidth mi dà la larghezza del genitore LienearLayout –

+0

perché ne hai bisogno? per impostare solo la gravità? – waqaslam

+0

perché non imposta solo la gravità, ma la riscrittura del testo, che funziona se ottengo la larghezza corretta di esso –

1

Quando si utilizza LinearLayout come genitore, poi layout_gravity viene in quadro che allineare il controllo, ma non il contenuto all'interno del controllo così, Invece usando android:layout_gravity uso android:gravity.

+0

ah scusa è stata colpa mia ... Voglio impostare LayoutGravity perché Gravity non fa nulla ... ha aggiornato la mia domanda –

5

È necessario impostare la gravità delle LayoutParams oggetto invece della vista stessa:

TextView tv = new TextView(getApplicationContext()); 
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.FILL_PARENT); 
lp.gravity = Gravity.CENTER; 
tv.setLayoutParams(lp);