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 只有一个没有背景的黄色星形表示启用,灰色一个表示禁用。它停留在左侧,我无法使其居中

感谢帮助

4

3 回答 3

1

如果将 FrameLayout 更改为 RelativeLayout,则只需将 android:center_in_parent 设置为 true;

于 2012-05-04T15:37:57.447 回答
0

我不相信这是可能的(至少在 API 版本 8 中没有)

这是来自 CompoundButton.onDraw 的代码,这似乎表明 CompoundButton 在父视图中偏移为 0 的边界矩形内绘制 buttonDrawable(代表您的复选框图像)。

@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 为单位)。这会挤压可绘制按钮,并且不会在右侧呈现所有空白区域。

于 2012-06-08T01:14:28.043 回答
0

在您的框架布局中,将重力设置为中心。机器人:重力=“中心”

于 2012-05-04T15:44:49.290 回答