2012-05-04 80 views
1

我想製作一個自定義的ChedckBox,並有一箇中心按鈕部分的麻煩。這裏是代碼:複選框 - 居中按鈕

<FrameLayout 
    android:layout_width="@dimen/checkbox_height" 
     android:layout_height="@dimen/checkbox_height" 
     android:background="@drawable/checkbox_background_info" 
     android:padding="5dp" > 

     <CheckBox 
      android:id="@+id/classification_uk_selected" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:button="@drawable/checkbox_star_info"> 

     </CheckBox> 

</FrameLayout> 

Drawbale只是一個黃色的星星,沒有背景的啓用和灰色的禁用。它停留在左手邊,我不能讓如果你改變的FrameLayout到RelativeLayout的你可以設置的android它爲中心

感謝您的幫助

回答

1

:center_in_parent爲true;

+0

不動它了,它因爲它被鎖定到左側 –

0

在您的框架佈局中將重力設置爲中心。 安卓重力=「中心」

+0

不動它了,它因爲它被鎖定到左側 –

+0

的android:layout_width =「@捫/ checkbox_height」 你設置佈局寬度作爲您的複選框高度是正確的.... –

+0

@BharatSharma重力是爲文本 – Storm2010

0

我不相信這是可能的(ATLEAST不是在API版本8)

這裏是CompoundButton.onDraw,這似乎預示着代碼CompoundButton繪製buttonDrawable(代表您的複選框圖像)在邊界矩形內,在父視圖中偏移量爲0。

@Override 
protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 

    final Drawable buttonDrawable = mButtonDrawable; 
    if (buttonDrawable != null) { 
     final int verticalGravity = getGravity() & Gravity.VERTICAL_GRAVITY_MASK; 
     final int height = buttonDrawable.getIntrinsicHeight(); 

     int y = 0; 

     switch (verticalGravity) { 
      case Gravity.BOTTOM: 
       y = getHeight() - height; 
       break; 
      case Gravity.CENTER_VERTICAL: 
       y = (getHeight() - height)/2; 
       break; 
     } 

     buttonDrawable.setBounds(0, y, buttonDrawable.getIntrinsicWidth(), y + height); 
     buttonDrawable.draw(canvas); 
    } 
} 

而是嘗試將CheckBox的寬度設置爲稍大於dp中的寬度(大於您使用的圖像的大小)。這會擠壓可繪製的按鈕,並且不會在右側的所有空白處進行渲染。