最近做的练手的小项目中存在一个横向滑动的问题,需要HorizontalScroll中嵌套GridView,但是GridView默认是竖直排放的item,况且HorizontalScroll与GridView都属于存在滚动条的控件,所以会有一些冲突问题,这里上网搜索了一下,发现了一个较为简单的解决办法,就是在java代码中动态的设置GridView的numColumns属性、每项Item的宽度和GridView的总宽度。将numColumns设置为与list集合的长度一致,下面贴出关键代码:
int length = 150; //定义一个长度
int size = groupBuyList.size(); //得到集合长度
//获得屏幕分辨路
DisplayMetrics dm = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm);
float density = dm.density;
// Log.d(TAG, "handleMessage: "+density);
int gridviewWidth = (int) (size * (length + 10) * density);
int itemWidth = (int) (length * density); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
gridviewWidth, LinearLayout.LayoutParams.MATCH_PARENT);
myGirdView.setLayoutParams(params); // 设置GirdView布局参数,横向布局的关键
myGirdView.setColumnWidth(itemWidth); // 设置列表项宽
myGirdView.setHorizontalSpacing(15); // 设置列表项水平间距
myGirdView.setStretchMode(GridView.NO_STRETCH);
myGirdView.setNumColumns(size); // 设置列数量=列表集合数
效果如下所示:
下面这两篇比较相似的博文都有简单的完整的代码,不过只是一个演示Demo的代码,想了解的朋友们可以过去围观一下: