2013-05-22 6 views
5

Wenn Sie an RadioButtons zusätzlich zu (oder anstelle von) CheckBoxen interessiert sind, lesen Sie stattdessen this Frage.Zentrieren von CheckBox-Ansichten

Trotz der Anwesenheit von

<item name="android:layout_gravity">center_horizontal</item> 

in der Style-Datei, die beiden Kontrollkästchen nicht zentriert sind, sondern erscheinen "linksbündig".

non-centered

res/layout/activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/MyLL" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"> 

    <CheckBox 
     android:id="@+id/cb1" 
     style="@style/CB_style" /> 

    <CheckBox 
     android:id="@+id/cb2" 
     style="@style/CB_style" /> 

</LinearLayout> 

res/Werte/styles.xml

<style name="CB_style" parent="@android:style/TextAppearance.Medium"> 
    <item name="android:layout_gravity">center_horizontal</item> 
    <item name="android:layout_weight">1</item> 
    <item name="android:gravity">center</item> 
    <item name="android:checked">false</item> 
    <item name="android:layout_width">wrap_content</item> 
    <item name="android:layout_height">wrap_content</item> 
</style> 

Antwort

1

Sie haben android: layout_weight = 1. Ihre Kontrollkästchen füllen also die gesamte Bildschirmbreite aus. Entfernen Sie Android: layout_weight von Stil und fügen Sie Marge zwischen den Kontrollkästchen.

Schwerkraft in Kontrollkästchen beeinflussen nicht die innere Tick-Schaltfläche, nur Text.

EDIT

Ok, versuchen Sie dies:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/MyLL" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"> 

    <TextView 
     android:layout_width="0dp" 
     android:layout_height="5dp" 
     android:layout_weight="1"/> 

    <CheckBox 
     android:id="@+id/cb1" 
     style="@style/CB_style" /> 

    <TextView 
     android:layout_width="0dp" 
     android:layout_height="5dp" 
     android:layout_weight="1"/> 

    <CheckBox 
     android:id="@+id/cb2" 
     style="@style/CB_style" /> 

    <TextView 
     android:layout_width="0dp" 
     android:layout_height="5dp" 
     android:layout_weight="1"/> 

</LinearLayout> 

Und layout_weight von Stil entfernen.

Eine andere Möglichkeit ist ein benutzerdefiniertes Kontrollkästchen. Aber ich denke, es ist zu kompliziert für dieses Problem.

+0

Ja, aber ich würde das Linearlayout wie die Breite des Bildschirms zu besetzen. Wenn ich android: layout_weight = 1 entferne, werden die beiden Kontrollkästchen links neben dem Bildschirm angezeigt. Sie werden zentriert, aber nur weil sie wrap_content gesetzt haben. – Calaf

-1
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/MyLL" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:layout_gravity="center" 
android:gravity="center" 
android:orientation="horizontal" > 

<LinearLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_weight="0.5" 
    android:background="#ff0000" 
    android:gravity="center" > 
    <CheckBox 
     android:id="@+id/cb1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 
</LinearLayout> 

<LinearLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_weight="0.5" 
    android:background="#00FF00" 
    android:gravity="center" > 
<CheckBox 
    android:id="@+id/cb2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" /> 
</LinearLayout> 

ok, letzter Versuch für heute;) Sie ein Bild der nächste Mal schreiben sollen, wie es aussehen sollte ... na ja, jetzt wirst du dein Linearlayout in zwei ähnlich breiten Teil geteilt hat (rot & grün), und in jedem Block ist das Kontrollkästchen in der Mitte ... habe ich es diesmal richtig gemacht ?!

+0

Entfernen der beiden Schwerlinien in der Style-Datei und das Hinzufügen von der Schwerkraft Sie zum Linearlayout vorschlagen funktioniert nicht. Funktioniert es auf Ihrer Seite? Sie brauchen kein Gerät. Eclipse zeigt das Problem. – Calaf

+0

i meine Antwort aktualisiert ... Ihr Problem ist das Layout Gewicht 1, wo Sie sagen, dass Ihr Element der ganzen Raum einnehmen sollte (oder die Hälfte davon, wenn man zwei von ihnen definieren ...) – longilong

+0

Aber mir ** tue **, dass das LinearLayout den gesamten verfügbaren Platz einnimmt. Ich möchte auch, dass die beiden Kontrollkästchen diesen Raum gleichmäßig teilen (daher 1,1). Die Lösung, die Sie vorschlagen, führt dazu, dass die beiden Kontrollkästchen sich zusammenfügen, diesmal in der Mitte. – Calaf

0

Hier ist etwas, das helfen kann:

android: Schwere vs Android: layout_gravity

  • android: Schwerkraft ist in der Regel intern, in der Regel der Ansicht, fragen sich, was mit den Pixeln, es zu tun hat
  • android: layout_gravity ist normalerweise extern und fragt in der Regel nach der übergeordneten ViewGroup (LinearLayout/RelativeLayout/FrameLayout), wie die Ansicht mit zusätzlichen Pixeln positioniert wird, die die Ansicht nicht verwendet

Wenn Sie eine Ansicht mit wrap_content verwenden, möchten Sie wahrscheinlich layout_gravity verwenden. Wenn Sie eine Ansicht mit "match_parent" verwenden, möchten Sie wahrscheinlich die Gravitation ausprobieren.

Manchmal mit Positionierung helfen kann einen anderen Viewgroup um einen lästigen Blick wickeln. Views und ViewGroups durchlaufen eine komplizierte "Screen Space" Verhandlungsphase, und verschiedene Ansichten (Buttons/TextView/ImageView/etc) und ViewGroups (LinearLayout/RelativeLayout/TableLayout/etc) haben unterschiedliche Regeln und Verhandlungsstärken manchmal Paarung eine lästige Ansicht mit einem anderen Elternteil wie ein FrameLayout oder Linearlayout kann es ganz plötzlich

0

verhalten macht Dies ist ein wenig chaotisch, aber es funktioniert, und ja, es funktioniert auch für 3 oder mehr Kontrollkästchen Eingänge:

<LinearLayout 
         android:padding="0dip" 
         android:layout_width="0dp" 
         android:layout_weight="1" 
         android:hint="name" 
         android:layout_height="40dip" 
         android:textAlignment="center" android:layout_gravity="center" 
         android:orientation="horizontal" 
         > 
         <TextView 
          android:layout_width="0dip" 
          android:layout_height="1dip" android:layout_weight="1" android:text=" " /> 
         <CheckBox 
          android:id="@+id/chk1" 
          android:layout_width="wrap_content" 
          android:layout_height="fill_parent" 
          android:scaleX="1.5" android:scaleY="1.5" 
          > 
         </CheckBox> 
         <TextView 
          android:layout_width="0dip" 
          android:layout_height="1dip" android:layout_weight="1" android:text=" " /> 
         <CheckBox 
          android:id="@+id/chk2" 
          android:layout_width="wrap_content" 
          android:layout_height="fill_parent" 
          android:scaleX="1.5" android:scaleY="1.5" 
          > 
         </CheckBox> 
         <TextView 
          android:layout_width="0dip" 
          android:layout_height="1dip" android:layout_weight="1" android:text=" " />        
        </LinearLayout> 
0

es in der Art Versuchen

<item name="android:layout_width">0dp</item> 

hoffe, dass ich es .. Dank funktioniert ..

-1

Gerade diese zu Ihrem Linearlayout hinzu:

android:gravity="center_horizontal" 

Diese Zeile gibt an, dass irgendetwas in diesem Layout in der Mitte sein. Der vollständige Layout-Code:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="horizontal" android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:gravity="center_horizontal"> 


    <CheckBox 
     android:id="@+id/cb1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="CheckBox ONE" 
     /> 

    <CheckBox 
     android:id="@+id/cb2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="CheckBox TWO" /> 


</LinearLayout> 

Hier ist die Ausgabe ich erhielt:

enter image description here

0
<style name="TextlessCheckBox" parent="android:Widget.Material.CompoundButton.CheckBox"> 
    <item name="android:button">@null</item> 
    <item name="android:foreground">?android:listChoiceIndicatorMultiple</item> 
    <item name="android:foregroundGravity">center</item> 
</style>