2013-05-22 13 views
5

Se sei interessato a RadioButton oltre a (o invece a) CheckBox, vedi invece la domanda this.Centering CheckBox Views

Nonostante la presenza di

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

nel file di stile, le due caselle di controllo non sono centrate, ma appaiono "allineato a sinistra".

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> 

ris/valori/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> 

risposta

1

Hai Android: layout_weight = 1. Quindi le tue caselle di controllo riempiono tutta la larghezza dello schermo. Rimuovi android: layout_weight dallo stile e aggiungi margine tra le caselle.

Gravity in Checkbox non influisce sul pulsante di spunta interno, solo testo.

EDIT

Ok, provate questo:

<?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> 

E rimuovere layout_weight da stile.

Un altro modo è creare la casella di controllo personalizzata. Ma penso che sia troppo complicato per questo problema.

+0

Sì, ma vorrei il LinearLayout ad occupare la larghezza dello schermo. Se rimuovo Android: layout_weight = 1, le due caselle di controllo collassano alla sinistra dello schermo. Diventano centrati, ma è solo perché hanno set wrap_content. – 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, ultimo tentativo per oggi;) si dovrebbe inviare una foto la prossima volta, come dovrebbe apparire ... bene, ora è ll avere il vostro LinearLayout diviso in due simili larga parte (rosso & verde), e in ogni blocco la tua casella di controllo è al centro ... ho capito bene questa volta ?!

+0

Rimuovere le due linee di gravità nel file di stile e aggiungere la gravità suggerita al LinearLayout non funziona. Funziona dalla tua parte? Non hai bisogno di un dispositivo. Eclipse mostra il problema. – Calaf

+0

ho aggiornato la mia risposta ... il tuo problema è il peso del layout 1, dove dici che il tuo elemento dovrebbe prendere tutto lo spazio che ha (o metà, se ne definisci due ...) – longilong

+0

Ma io ** do ** vuole che LinearLayout prenda tutto lo spazio che ha. Voglio anche che le due caselle di controllo suddividano lo spazio in modo uguale (quindi 1,1). La soluzione che suggerisci mette insieme le due caselle di controllo, questa volta al centro. – Calaf

0

ecco qualcosa che può aiutare:

Android: la gravità vs Android: layout_gravity

  • Android: la gravità è di solito interno, di solito chiedendo la vista in sé che cosa fare con i pixel che ha
  • android: layout_gravity è solitamente esterno, di solito chiede al genitore ViewGroup (LinearLayout/RelativeLayout/FrameLayout) come posizionare la vista con pixel aggiuntivi che la vista non sta usando

Se si utilizza una vista con wrap_content, probabilmente si desidera utilizzare layout_gravity. Se stai usando una vista con match_parent, probabilmente vorrai provare la gravità.

A volte il wrapping di un altro gruppo di vista attorno a una vista problematica può aiutare con il posizionamento. Views e ViewGroup passano attraverso una complessa fase di negoziazione dello "spazio dello schermo" e diverse View (Buttons/TextView/ImageView/etc) e ViewGroups (LinearLayout/RelativeLayout/TableLayout/etc) hanno regole e poteri negoziali diversi

Ecco perché a volte l'associazione di un fastidioso View con un altro genitore come un FrameLayout o LinearLayout può rendere comportarsi all'improvviso

0

Questo è un po 'disordinato ma funziona, e sì, funziona così per 3 o più ingressi casella di controllo:

<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

Provalo con stile

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

spero che funzionerà .. grazie ..

-1

Basta aggiungere questo al vostro LinearLayout:

android:gravity="center_horizontal" 

Questa riga specifica che qualsiasi cosa all'interno di questa disposizione sarà al centro. Il codice di layout completi:

<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> 

Ecco l'output che ho ottenuto:

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>