以编程方式为每个单元格创建带有边距的GridView

时间:2016-07-31 10:30:47

标签: android android-gridview programmatically-created

我想创建一个动态的gridview programmaticaly。一切都很好看。但是不显示每个单元格的边距。请帮忙。

PagerAdapter:

@Override
public Object instantiateItem(ViewGroup container, int position) {
    Calendar viewData = getData(position);
    GridView gridView = new GridView(mContext);
    gridView.setLayoutParams(new ViewGroup.LayoutParams(
            ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.MATCH_PARENT));
    gridAdapter = new GridAdapter(mContext, viewData);
    gridView.setNumColumns(4);
    gridView.setAdapter(gridAdapter);
    container.addView(view);
    return gridView;
}

GridAdapter

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = LayoutInflater.from(mContext);
    ViewGroup layout = (ViewGroup) inflater.inflate(R.layout.cal_single_cell, parent, false);
    layout.setLayoutParams(new GridView.LayoutParams(2, 2));
    TextView lblDisplay = (TextView) layout.findViewById(R.id.lbl_cell_name);
    lblDisplay.setText(getDisplayText(position));

    if(CalendarConverter.dateCompare(getData(position), Calendar.getInstance(), VIEW_LEVEL) == 0){
        layout.setBackgroundColor(ContextCompat.getColor(mContext, R.color.backgorund_current_cell));
    }
    return layout;
}

我的cal_single_cell.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="wrap_content" android:theme="@style/CalendarSingleCell">

    <TextView
        android:id="@+id/lbl_cell_name"
        android:text="Jan"
        android:textSize="18dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:minHeight="64dp"
        android:gravity="center" />

</LinearLayout>

view display result on google drive

1 个答案:

答案 0 :(得分:0)

我认为您的主要错误是您想要更改单元格边距而不是更改GridView边距。

使用GridView属性 android:horizo​​ntalSpacing android:verticalSpacing 。此问题中的更多信息 - Increase the grid spacing in android

或者在行视图(每个单元格视图)中更改边距,填充视图。以编程方式在 getView 方法中执行类似的操作:

view.setLayoutParams(/* your layout params */); //where view is cell view

在你的代码中:

@Override
   public View getView(int position, View convertView, ViewGroup parent) {

    LayoutInflater inflater = LayoutInflater.from(mContext);
    ViewGroup layout = (ViewGroup) inflater.inflate(R.layout.cal_single_cell, parent, false);

    //****************************
    //here set padding or margin

    layout.setLayoutParams(/* your layout params */);

    //***************************
    TextView lblDisplay = (TextView) layout.findViewById(R.id.lbl_cell_name);
    lblDisplay.setText(getDisplayText(position));

    if(CalendarConverter.dateCompare(getData(position), Calendar.getInstance(), VIEW_LEVEL) == 0){
        layout.setBackgroundColor(ContextCompat.getColor(mContext, R.color.backgorund_current_cell));
    }
    return layout;
}

重要

在每个getView中更改布局参数都不是最佳选择,如果必须这样做,则创建ViewHolder。