Checkbox: 无文本的checkbox居中显示

项目中有一个需求是让Checkbox居中显示,但是给checkBox直接设置 android:gravity="center" 属性无效,效果如下图:

可以看到,Checkbox中的图片仍然没有居中,后来找到了一种解决办法可以通过自定义CheckBox解决:

package com.yongdaimi.android.androidapitest.view;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.Gravity;

public class CenterCheckBox extends androidx.appcompat.widget.AppCompatCheckBox {
    private static final String TAG = CenterCheckBox.class.getSimpleName();

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

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

    public CenterCheckBox(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        Drawable[] drawables = getCompoundDrawables();
        Drawable drawable = drawables[0];
        int gravity = getGravity();
        int left = 0;
        if (gravity == Gravity.CENTER) {
            left = ((int) (getWidth() - drawable.getIntrinsicWidth() - getPaint().measureText(getText().toString())) / 2);
        }
        drawable.setBounds(left, 0, left + drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
    }
}

 

 可以看到效果已经可以了,不过要注意的是,XML中的属性必须定义成上面截图中的样子。

See: https://www.geek-share.com/detail/2726600111.html

 

posted @ 2020-08-28 09:42  夜行过客  阅读(4099)  评论(0编辑  收藏  举报