2011-06-15 14 views
10

Özel liste görünümü üzerinde çalışıyorum. Özel görünümde CheckBox göstermek istiyorum. CheckBox için bir metin yok. Her zaman CheckBox'un sağında bazı boşluklar olduğunu gördüm. Onay kutusunun sağında biraz boşluk vardır görebileceğiniz gibi
http://pwong.name/checkbox_problem2.jpgCheckBox'un sağındaki istenmeyen alanlar nasıl kaldırılır?

:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" android:layout_height="wrap_content" 
android:orientation="horizontal" android:background="#fa9654" 
android:paddingTop="65dp" android:paddingBottom="65dp"> 



<TextView android:id="@+id/bus_route_list_item_num" 
    android:layout_height="wrap_content" android:layout_width="0dip" 
    android:gravity="center" android:layout_gravity="center_vertical|center_horizontal" 
    android:layout_weight="0.15"></TextView> 

<TextView android:id="@+id/bus_route_list_item_station" 
    android:layout_height="wrap_content" android:layout_width="0dip" 
    android:gravity="left" android:layout_gravity="center_vertical|center_horizontal" 
    android:layout_weight=".5"></TextView> 


<TextView android:id="@+id/bus_route_list_item_fee" 
    android:layout_height="wrap_content" android:layout_width="0dip" 
    android:gravity="center" android:layout_gravity="center_vertical|center_horizontal" 
    android:layout_weight=".15"></TextView> 


<CheckBox android:id="@+id/bus_route_list_item_reminder" android:layout_height="wrap_content" 
    android:layout_width="0dip" android:layout_weight=".20" android:gravity="center" 
    android:layout_gravity="center" android:paddingRight="0dp" android:paddingLeft="0dp" 
    android:paddingTop="0dp" android:paddingBottom="0dp" android:background="#0066ff" 
    android:text="" 
/> 

</LinearLayout> 

sonuç gibi görünüyor:

İşte benim düzen xml dosyasıdır. İstediğim şey, mavi alanın ortasındaki onay kutusunu koymak.

İstenmeyen alanı kaldırmak mümkün mü? teşekkürler

cevap

15

LinearLayout'ta CheckBox'u sarın ve bu düzende android:gravity="center"'u kullanabilirsiniz.

<LinearLayout 
    android:layout_height="wrap_content" 
    android:layout_width="0dip" 
    android:layout_weight=".20"    
    android:background="#ff0000" 
    android:gravity="center"> 

    <CheckBox android:id="@+id/bus_route_list_item_reminder" 
     android:layout_height="wrap_content" 
     android:layout_width="wrap_content"      
    /> 

</LinearLayout> 

Başka bir alternatif olarak, RelativeLayout'u kullanabilirsiniz. Bu size düzeni basitleştirir ve layout_weight'dan kurtulabilirsiniz.

+0

Teşekkürler inazaruk, işe yarıyor! –

+0

@Android Acemi kabul @inazaruk cevap o zaman ... – Snicolas

+0

android çalışmaz do 4.1.2. Sanırım bir böcek. CheckBox – Malachiasz

0

Burada göreli bir düzen kullanırdım.

+0

Teşekkürler Stéphane kullanmayın –

2

görüntünün sağında ekstra alan çıkarın (metin olduğunda) için getSuggestedMinimumWidth() yöntemi CheckBox sınıfını genişletmek ve geçersiz kılmak için ... ebeveyn sağda

Saygılarımızla, Stéphane onay kutusunu hizalama görüntü genişliğine geri dönün. Komple çözüm: Ne önceki çözümlerin

import android.content.Context; 
import android.graphics.drawable.Drawable; 
import android.os.Build; 
import android.util.AttributeSet; 
import android.widget.CheckBox; 

public class CheckBoxWithoutText extends CheckBox 
{ 
    private Drawable buttonDrawable; 

    public CheckBoxWithoutText(Context context) 
    { 
     super(context); 
    } 

    public CheckBoxWithoutText(Context context, AttributeSet attrs) 
    { 
     super(context, attrs); 
    } 

    @Override 
    protected int getSuggestedMinimumWidth() 
    { 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) 
     { 
      return getCompoundPaddingLeft() + getCompoundPaddingRight(); 
     } 
     else 
     { 
      return buttonDrawable == null ? 0 : buttonDrawable.getIntrinsicWidth(); 
     } 
    } 

    @Override 
    public void setButtonDrawable(Drawable d) 
    { 
     buttonDrawable = d; 
     super.setButtonDrawable(d); 
    } 
} 
2

benim için çalıştı, ama içeriğe çevirisini uygulayarak denedim ve oldukça iyi ek düzen hiyerarşisinde gerek çalıştı, ne uygulanması kendi görüşleri:

   <CheckBox 
       ... 
       android:text="@null" 
       android:translationX="12dp" /> 

Ayrıca, öğenin sınırlarını uygun bir yerde tutar, bu nedenle dokunma alanı kaydırılmaz.