2012-06-11 13 views
18

Moje pytanie jest bardzo proste. Jak wyśrodkować tekst na przycisku w systemie Android? Próbowałem ustawić padding na 0, grawitację, aby wyśrodkować, ale wynik, gdy nadal go używam, tekst jest wyśrodkowany, ale nie pionowy. Tekst jest nieco przesunięty w dół.Tekst centralny przycisk 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" /> 

Moja być również istotne: W działalności zrobić to:

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

To działa, ale po to ustawić w ten sposób:

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

Wynik jest zły pionowe wyrównanie.

Odpowiedz

12

Twój obecny układ nie może mieć nadziei wyśrodkowania tekstu ze względu na wybrane rozmiary. Ustawiłeś wysokość przycisku na 30dp, a Twój rozmiar tekstu to 50dp. Z jakiegoś powodu Android nie jest w stanie poradzić sobie z tym i wyśrodkować tekst. Jeśli przycisk zostanie powiększony lub tekst będzie mniejszy, zobaczysz, że centrowanie działa.

+0

jeżeli wysokość jest 30dp to co jest użycie 'android: layout_height = "wrap_content" '? –

+0

@hotveryspicy - umieść układ przycisków w xml i załaduj go, a zobaczysz, że "wrap_content" wydaje się nie przejmować rozlewaniem tekstu w tym przypadku. Nie wiem, dlaczego tak się dzieje, ale tak właśnie się dzieje (przynajmniej przy przeglądaniu graficznym układu Eclipse, którego nie umieściłem na urządzeniu). – mah

+0

Dzięki, ale usunięcie Androida: layout_height lub android: layout_width rozwiązuje w 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" /> 

ten pracował dla mnie

0

Można również użyć liczb ujemnych w setPadding. Może to pomóc, jeśli czcionka jest duża, a przycisk jest mały. Spróbuj także ustawić górną lub dolną wartość na bardziej ujemną, jeśli nadal znajduje się poza centrum.

1

Istnieją trzy systemy do rozważenia. Projektant układu xml, symulator i prawdziwy telefon. Tekst na przycisku, jeśli określisz grawitację = "centrum", będzie wyglądał tak. W projektancie układu xml będzie wyglądać tak, że pierwsza na lewo litera znajduje się na środku przycisku, ale pozostałe litery znajdują się po prawej stronie. (wygląda niepoprawnie) W symulatorze tekst pokazuje się dobrze w środku. (poprawne) W telefonie tekst pokazuje się dobrze w środku. (Poprawne)

+0

Dziękuję za tę odpowiedź, spędziłem 15 minut zastanawiając się, co robiłem źle i okazuje się, że po prostu "wygląda" niepoprawnie –

24

To bardzo proste, można umieścić w tym:

android:textAlignment="gravity" 

Praca ta, kiedy masz to:

android:gravity="center"