我想创建一个动态的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>
答案 0 :(得分:0)
我认为您的主要错误是您想要更改单元格边距而不是更改GridView边距。
使用GridView属性 android:horizontalSpacing , 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。