首页 > 解决方案 > 如何在中心的 GridView 中统一视图?

问题描述

我正在使用 GridView 创建颜色选择器。每个单元格内都有一个圆圈。即使我为 layout_width 和 layout_height 设置了换行内容,列之间也总是存在间隙。我想联合中心的细胞或消除这些间隙。

这是我的 GridView 的布局 xml。

<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/color_picker"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:numColumns="3" />

CircleView 类

public class CircleView extends View {
    private static final String TAG = "CircleView";
    private Paint mCirclePaint;
    private int mCircleColor;

    private Paint mStrokePaint;
    private int mStrokeColor;

    private int mWidthInDp;
    private int mHeightInDp;

    public CircleView(Context context){
        super(context);

        mCirclePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        mCirclePaint.setColor(mCircleColor);
    }

    @Override
    protected void onMeasure(int widthMeasuredSpec, int heightMeasuredSpec) {
        Log.d(TAG, "onMeasure: ");

        setMeasuredDimension(mWidthInDp, mHeightInDp);
    }

    public void setLayoutParamsInDp(int width, int height){
        this.mWidthInDp = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, width, getResources().getDisplayMetrics());
        this.mHeightInDp = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, height, getResources().getDisplayMetrics());
    }

    public void setCircleColor(int color){
        this.mCircleColor = color;
        mCirclePaint.setColor(mCircleColor);
    }

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

        int centerX = mWidthInDp / 2;
        int centerY = mHeightInDp / 2;

        float radius = Math.min(mWidthInDp, mWidthInDp) / 2;

        canvas.drawCircle(centerX, centerY, radius, mCirclePaint);
        canvas.save();
    }
}

GridView 适配器

    @Override
    public View getView(int position, View convertView, ViewGroup viewGroup) {
        CircleView circleView = new CircleView(mContext);
        circleView.setCircleColor(mColors.get(position));
        circleView.setLayoutParamsInDp(50, 50);
        return circleView;
    }

这是输出。如何删除圆圈之间的间隙?

在此处输入图像描述

标签: androidgridview

解决方案


我认为问题出在作为父级的 GridView 中。添加另一个布局作为父布局,并在其中添加宽​​度和高度的 GridView 作为包装内容!


推荐阅读