2

Ich muss eine große Ziffer in einem Button zentrieren, aber es wird immer nach unten verschoben angezeigt. Bitte beachten Sie das Bild:Zentrieren großen Text in einer Taste in Android funktioniert nicht

enter image description here

Meine activity_main.xml Datei:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <Button 
     android:textSize="490sp" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_gravity="center_vertical" 
     android:gravity="center" 
     android:textAlignment="center" 
     android:includeFontPadding="false" 
     android:text="8" /> 
</LinearLayout>  

Wenn ich einige kleinere Textgröße einstellen - es ist richtig zentriert. Auch wenn ich ImageButton mit android:scaleType="center" verwende, ist das Bild perfekt zentriert. Aber ich muss Text zentrieren.

Könnten Sie bitte helfen, wie Sie dieses Problem lösen?

Definitiv ist es ein Android-Fehler. Wahrscheinlich gibt es eine Klasse oder einen Workaround.

+0

Bitte zeigen Sie definieren das vollständige Layout. Ihre Schaltfläche ist vom übergeordneten Element abhängig und kann nicht groß genug werden, um in den Text zu passen. Ändern Sie das übergeordnete Element, um ein größeres untergeordnetes Element zuzulassen, oder reduzieren Sie die Textgröße. – Francesc

+0

Ich habe verschiedene Layouts ausprobiert - es wird immer mit großem Text nach unten verschoben. Sie können ein neues einfaches Projekt erstellen und versuchen, einen großen Text in eine Schaltfläche einzufügen. Mit TextView gleiches Problem. Wahrscheinlich müssen Sie eine spezielle Klasse für diese Zentrierung implementieren, aber wo finden Sie sie? – ViH

+0

Das ist nicht das vollständige Layout, Ihr LinearLayout kann immer noch von seinem übergeordneten eingeschränkt werden. Bitte posten Sie das vollständige XML-Layout. – Francesc

Antwort

0

Versuchen Sie folgendes:

<Button 
    android:textSize="80sp" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:includeFontPadding="false" 
    android:text="8" 
    android:paddingTop="1dp" /> 
+0

Auch nach unten verschoben. – ViH

+1

posten Sie Ihre volle xml – Srdan

+0

Ich habe versucht, nur dieses Layout mit sehr großen Text zu verwenden - immer noch nach unten verschoben. – ViH

1
<LinearLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="vertical"> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     android:text="8" 
     android:textSize="80sp" /> 

So verwenden Sie fill_parent als Parameter in Boden und auch Linearlayout, also denke ich, was passieren könnte, ist es dosen't für die genügend Platz linearlayout und button, mit wrap_content kann die Unterseite passt den Text, nicht auf das Layout Gewicht und Höhe

***** Update **

Ich sah dich schon

android:includeFontPadding="false" 

hinzugefügt Wenn Sie wirklich den Raum entfernen möchten, versuchen

android:layout_marginTop="-100dp" 

in die Schaltfläche Parameter hinzufügen.

+0

OP, So machen Sie es. Wenn Sie nur um die Höhe besorgt sind, müssen Sie nur 'wrap_content' auf der Höhe verwenden. So oder so, wenn Sie möchten, können Sie etwas Füllung hinzufügen, um den Inhalt an den Rändern etwas Platz zu geben. –

+0

Nichts hat sich geändert - immer noch nach unten verschoben. Immer gibt es einige Schriftpolster. Aber wie man es los wird. – ViH

+0

Ok. Es gibt keinen Grund, dass das Layout Ihnen einen zusätzlichen Abstand/Rand geben sollte. Es muss sein, welches Layout es enthält. Können Sie Ihren ursprünglichen Beitrag so bearbeiten, dass er die Container-Layouts Ihrer App enthält (Tool/Appbar, beliebiges Layout, das auf dieses verweist usw.)? –

0

Nun, ich schlage vor, dass, wenn Sie Textgröße 450sp machen es Ihnen perfekten Ausgang geben

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <Button 
     android:textSize="450sp" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center_horizontal" 

     android:text="8" /> 
</LinearLayout> 

OUTPUT

enter image description here

+0

Ja, das weiß ich. Aber in meinem Fall ist die Textgröße kritisch. Ich habe ein Raster mit vielen solchen Knöpfen, und ich kann die Schriftgröße nicht mehr reduzieren. Ich brauche nur zentriert Text auf volle Höhe (oder sogar abgeschnitten oben und unten). – ViH

+0

was meinst du mit Gitter, was ist die Ansicht genau du versuchst zu erreichen. share shot shot –

+0

Grid - ich meine viele lineare Layouts, aber es ist nicht wichtig. Das Problem ist auf meinem Hauptpost (einfaches Layout) sichtbar. Warum, wenn wir die Schriftgröße 490sp einstellen, wird die Ziffer nach unten verschoben? Der Raum ist da. Wie entferne ich diese versteckte obere Polsterung? Ich experimentiere jetzt mit minHeight: http://StackOverflow.com/a/19300777/2240880 - keine Rückstöße. – ViH

0

In Ihrem Fall die Größe der Textview definiert ist zu groß für das Gerät, das Sie testen. Wenn Sie dasselbe Layout mit einem Gerät mit höherer Auflösung testen, erhalten Sie das gewünschte Ergebnis. Alles, was Sie tun müssen, ist verschiedene Textgrößen für unterschiedliche Auflösung Geräte zu definieren, indem verschiedene Werte für „textsize“ in res/Werte-LDPI, Werte-MDPI, Werte-hdpi, Werte-xhdpi usw.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <Button 
     android:textSize="@string/textSize" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_gravity="center_vertical" 
     android:gravity="center" 
     android:textAlignment="center" 
     android:includeFontPadding="false" 
     android:text="8" /> 
</LinearLayout> 
+0

Ja, das weiß ich. Aber in meinem Fall ist die Textgröße kritisch. Ich habe ein Raster mit vielen solchen Knöpfen, und ich kann die Schriftgröße nicht mehr reduzieren. Ich brauche nur zentriert Text auf volle Höhe (oder sogar abgeschnitten oben und unten). – ViH

+0

Verwenden Sie dieselbe Textgröße für alle Elemente in Ihrem Raster. Dann wird das Ergebnis wie erwartet sein. –