2011-06-15 76 views
10

我正在處理自定義列表視圖。我想在自定義視圖中顯示CheckBox。沒有CheckBox的文字。我發現它總是在CheckBox的右側有一些空格。如何刪除CheckBox右邊的不需要的空格?

這裏是我的佈局xml文件:

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

結果是這樣的:
http://pwong.name/checkbox_problem2.jpg

正如你可以看到有在複選框右側一些空間。我想要的是把複選框放在藍色區域的中間。

是否可以刪除不需要的空間?謝謝

回答

15

您可以在LinearLayout中包裝CheckBox,然後在該佈局上使用android:gravity="center"

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

作爲另一種替代方案,您可以使用RelativeLayout。這將大大簡化你的佈局,你將能夠擺脫layout_weight

+0

謝謝inazaruk,它的作品! – 2011-06-15 14:10:27

+0

@Android初學者接受@inazaruk回答然後... – Snicolas 2011-06-15 14:19:20

+0

不會在android 4.1.2中工作。我認爲這是一些錯誤。最好不要使用CheckBox – Malachiasz 2014-04-04 14:39:45

0

我會在這裏使用相對佈局。對準,父權複選框...

問候, 斯特凡

+0

謝謝Stéphane – 2011-06-15 14:10:08

2

要在圖像的右側刪除多餘的空間(當沒有文本),以延長CheckBox類和重寫getSuggestedMinimumWidth()方法返回圖像寬度。完整的解決方案:

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

無論是以前的解決方案,爲我工作,但我已經嘗試應用翻譯的內容和它的工作相當不錯,在另外的佈局層次沒有必要,也沒有實現自己的看法:

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

此外,它將元素的邊界保留在適當的位置,因此觸摸區域不會移位。