1、item设置的高度和宽度不起做用html
转自:http://www.cnblogs.com/0616--ataozhijia/p/6031875.htmljava
referece to : http://blog.csdn.net/beibeixiao/article/details/9032569android
1. 在Android开发中会发现,有时listView和GridView的item顶层布局不起做用,即不能设置高度和宽度express
缘由是当用自定义的adapter时,若是使用convertView= mInflater.inflate(R.layout.material_grid_item, null)apache
方法就不会起做用,这个 方法的第二个参数是父View,传入为空,因此没有加载顶层布局,此时若是使用app
convertView= mInflater.inflate(R.layout.material_grid_item, parent,false);传入parent设置的高度和宽度就会起做用了。less
2、自动适配列数ide
转自:http://blog.csdn.net/archer_zoro/article/details/43500389布局
写了一个展现多张图片的gridview(几乎每一个listview里面都有一个gridview)post
以前用auto_fit和设置列宽来控制列数,以达到自适应的目的。
这样的效果就是图片宽度最小为item_image_size,会在接近这个大小的状况下,自动调整一些大小将gridview占满,间隔不变。3列。
然后来在720p以上的手机上运行时,变成了4列,可是要求是3列,因而我把列数从auto_fit改为了3,依然是上面的显示效果,
可是,在滑动listview的过程当中明显比刚才卡顿了,因此有改回了auto_fit,转而把item_image_size增大了。
原理不清楚,留下这个坑待研究
转自:http://blog.csdn.net/maizangxiangwang/article/details/50913900
/** * 获取屏幕宽度 */ public static int getScreenWidth(Context context) { WindowManager manager = (WindowManager) context .getSystemService(Context.WINDOW_SERVICE); Display display = manager.getDefaultDisplay(); return display.getWidth(); } public static int dipToPx(Context context, int dip) { if(density <= 0.0F) { density = context.getResources().getDisplayMetrics().density; } return (int)((float)dip * density + 0.5F); }
给gridview子项要屏幕适配,子项item宽度,高度与宽度相同
itemWidth = (getScreenWidth(this)-(3*dipToPx(this, 3)))/2;
在gridview的adapter中的getview中设置子项的参数
public View getView(int position, View convertView, ViewGroup parent) { ViewHodler viewHodler; String url = blogAlbumList.get(position).getAlbumUrl(); if (convertView == null) { convertView = View.inflate(context, R.layout.celebrity_item, null); viewHodler = new ViewHodler(); viewHodler.iv_image = (ImageView) convertView.findViewById(R.id.iv_image); convertView.setTag(viewHodler); } else { viewHodler = (ViewHodler) convertView.getTag(); } // if (viewHodler.iv_image.getTag()!=url ||viewHodler.iv_image.getTag()==null) { ImageTools.getImageLoader().displayImage(blogAlbumList.get(position).getAlbumUrl(), viewHodler.iv_image, mDisplayImageOptions); // viewHodler.iv_image.setTag(url); // } AbsListView.LayoutParams param = new AbsListView.LayoutParams(LeoApplication.itemWidth, LeoApplication.itemWidth); convertView.setLayoutParams(param); return convertView; }
其实gridview有个属性.Android:stretchMode=”columnWidth"//缩放与列宽大小同步
1.android:numColumns=”auto_fit” //GridView的列数设置为自动
2.android:columnWidth=”90dp " //每列的宽度,也就是Item的宽度
3.android:stretchMode=”columnWidth"//缩放与列宽大小同步
4.android:verticalSpacing=”10dp” //两行之间的边距
5.android:horizontalSpacing=”10dp” //两列之间的边距
6.android:cacheColorHint="#00000000" //去除拖动时默认的黑色背景
7.android:listSelector="#00000000" //去除选中时的黄色底色
8.android:scrollbars="none" //隐藏GridView的滚动条
9.android:fadeScrollbars="true" //设置为true就能够实现滚动条的自动隐藏和显示
10.android:fastScrollEnabled="true" //GridView出现快速滚动的按钮(至少滚动4页才会显示)
11.android:fadingEdge="none" //GridView衰落(褪去)边缘颜色为空,缺省值是vertical。(能够理解为上下边缘的提示色)
12.android:fadingEdgeLength="10dip" //定义的衰落(褪去)边缘的长度
13.android:stackFromBottom="true" //设置为true时,你作好的列表就会显示你列表的最下面
14.android:transcriptMode="alwaysScroll" //当你动态添加数据时,列表将自动往下滚动最新的条目能够自动滚动到可视范围内
15.android:drawSelectorOnTop="false" //点击某条记录不放,颜色会在记录的后面成为背景色,内容的文字可见(缺省为false)
3、添加Header和Footer
转自:http://blog.csdn.net/zhzhyang0313/article/details/39163735
实现这个功能通常有两种思路,一种思路是使用ScrollView+GridView,第二种思路是使用ListView来实现GridView的效果。
第一种思路的具体实现是把HeaderView和GridView都放到ScrollView里面,这里要解决的问题是ScrollView和GridView滑动手势的冲突问题,解决办法是让GridView充满ScrollView,不让GridView滑动而只让ScrollView滑动。具题作法是重载GridView的onMeasure()方法。
这种方法的不足是GridView中的View没有复用,若是内容较多将比较消耗内存。
第二种思路的具体实现是使用ListView的addHeaderView()来添加HeaderView,而ListView的每一行都放一个LinearLayout来保存一行的item,这里要注意的是item的个数和ListView行数的关系。
后来在StackOverFlow上又看到了第三中方法。原来Google已经用GridView实现了,并且很巧妙,下面把代码贴出来
代码地址:https://android.googlesource.com/platform/packages/apps/Gallery2/+/idea133/src/com/android/photos/