2012-06-11 12 views
18

La mia domanda è molto semplice. Come faccio a centrare il testo su un pulsante in Android? Ho provato a impostare il padding su 0, gravità al centro, ma il risultato quando lo eseguo è che il testo è orizzontale centrato ma non verticale. Il testo è leggermente spostato verso il basso.Pulsante centrale pulsante android

<Button 
    android:id="@+id/btnSame" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" 
    android:layout_marginBottom="10dip" 
    android:layout_marginLeft="10dip" 
    android:layout_marginRight="10dip" 
    android:background="@drawable/layout_button_different" 
    android:gravity="center_vertical|center_horizontal" 
    android:height="30dp" 
    android:padding="0dip" 
    android:text="@string/equals" 
    android:textColor="@drawable/layout_button_different" 
    android:textSize="50dp" 
    android:width="70dp" /> 

mio essere anche rilevanti: Nell'attività faccio questo:

btnEquals.setCompoundDrawablesWithIntrinsicBounds(null,getResources().getDrawable(R.drawable.up2), null, null); 
btnEquals.setPadding(0, 5, 0, 0); 
btnEquals.setTextSize(15); 

Questo funziona ma dopo questo ho impostato questo:

btnEquals.setCompoundDrawables(null, null, null, null); 
btnEquals.setPadding(0, 0, 0, 0); 

Il risultato è un allineamento verticale male.

risposta

12

Il layout esistente non può sperare di centrare il testo a causa delle dimensioni selezionate. Hai impostato l'altezza del pulsante su 30dp e textSize è 50dp e, per qualsiasi motivo, Android non è in grado di gestirlo e centrare il testo. Se ingrandisci o riduci il testo, vedrai che il centraggio funziona.

+0

se l'altezza è 30dp allora che cosa è l'uso di 'Android: layout_height = "wrap_content" '? –

+0

@hotveryspicy - metti il ​​layout del pulsante in un xml e caricalo, e vedrai che il 'wrap_content' sembra non preoccuparsi dello sversamento del testo in questo caso. Non so perché ciò accada, ma è ciò che accade (almeno se visto attraverso la visualizzazione visiva di Eclipse del layout, non l'ho messo su un dispositivo). – mah

+0

Grazie ma cancellando android: layout_height o android: layout_width risolve in una RuntimeException. – dieters

-1
<Button 
       android:id="@+id/AnswerE" 
       style="@style/defaultbuttonstyle" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:layout_weight="1" 
       android:gravity="center" 
       android:onClick="AnswerCheck" 
       android:text=" E " 
       android:textStyle="bold" /> 

questo ha lavorato per me

0

È inoltre possibile utilizzare i numeri negativi in ​​setPadding. Questo può aiutare se il tuo font è grande e il tuo pulsante è piccolo. Prova anche a impostare la parte superiore o inferiore su un numero più negativo se è ancora fuori centro.

1

Ci sono tre sistemi da considerare. Il designer di layout xml, il simulatore e il telefono reale. Il testo nel pulsante se si specifica gravità = "centro" sarà simile a questo. Nella finestra di progettazione del layout xml sembrerà che la lettera più a sinistra si trovi al centro del pulsante, ma il resto delle lettere si trova a destra. (sembra errato) Nel simulatore, il testo mostra bene al centro. (corretto) Nel telefono, il testo mostra bene al centro. (Corretto)

+0

Grazie per questa risposta, ho passato 15 minuti a chiedermi cosa stavo facendo male e si scopre che solo 'sembra' incorretto –

24

E 'molto semplice, si mette in questo modo:

android:textAlignment="gravity" 

Questo lavoro quando si dispone di questo:

android:gravity="center"