android - 如何在中心的 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;
}
这是输出。如何删除圆圈之间的间隙?
解决方案
我认为问题出在作为父级的 GridView 中。添加另一个布局作为父布局,并在其中添加宽度和高度的 GridView 作为包装内容!