最近在android项目中,遇到需要动态设置GridView列数的问题,实现如下:

首先大体估算一下item宽度(这里估计宽度100,然后计算满屏能显示几个item):

GridView hotGrid = (GridView) findViewById(R.id.hot_word_grid);

int colnum = ZETTool.getScreenWith(HomeSearchActivity.this) / 100;

hotGrid.setNumColumns(colnum);

在Adapter  getView方法中:

@Override

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

TextView wordTV;

if (convertView == null){

convertView = LayoutInflater.from(context).inflate(R.layout.hot_word_item,null);

wordTV = (TextView)convertView.findViewById(R.id.grid_hot_word_tv);

convertView.setTag(wordTV);

}else {

wordTV = (TextView)convertView.getTag();

}

HotWordsModel.ContractRootModel.BusContModel.KeywordListModel model = dataList.get(position);

wordTV.setText(model.getContent());

// 根据列数计算项目宽度,以使总宽度尽量填充屏幕

int itemWidth = (ZETTool.getScreenWith((Activity) context) - colnum * 10) / colnum;

AbsListView.LayoutParams param = new AbsListView.LayoutParams(

itemWidth,

AbsListView.LayoutParams.WRAP_CONTENT);

convertView.setLayoutParams(param);

return convertView;

}

附上效果图

0818b9ca8b590ca3270a3433284dd417.png

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐