控制GridView中的行高
来源:互联网 发布:java开发物流管理系统 编辑:程序博客网 时间:2024/05/17 07:39
使用GridView的时候,是只能控制列数和列宽,是不能指定每一列的行高的。在加载要显示的内容时,就算在item的布局文件中限定了宽高,但是当item被加载GridView中时,布局文件中的限制是起不到作用的,item会根据加载内容的高度自动调整,如果加载的内容很高或者很矮,那么item也会变的很高或者很矮,导致GridView每一行或者行与行之间的显示高度差异很大,无法控制。可以看一下如下的例子:
item的布局文件:
<span style="font-family:KaiTi_GB2312;font-size:18px;"><ImageView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/imageview" android:layout_width="80dp" android:layout_height="80dp" ></ImageView></span>
GridView的布局文件
<span style="font-family:KaiTi_GB2312;font-size:18px;"><GridView android:id="@+id/gridview" android:layout_width="match_parent" android:layout_height="wrap_content"android:numColumns="3"android:listSelector="@android:color/transparent"android:gravity="center" ></GridView></span>Adapter中的getView方法:
<span style="font-family:KaiTi_GB2312;font-size:18px;">public View getView(int position, View cv, ViewGroup parent) {ViewHolder vh = null;if(cv == null){cv = inflater.inflate(R.layout.item_layout, null);vh = new ViewHolder();vh.cv = (ImageView) cv.findViewById(R.id.imageview);cv.setTag(vh);}else{vh = (ViewHolder) cv.getTag();}Bitmap bitmap = null;bitmap = BitmapFactory.decodeFile(getItem(position));vh.cv.setImageBitmap(bitmap);//vh.cv.setImageURI(Uri.parse(getItem(position)));return cv;}</span>Adapter中的数据源是从MediaStore中获得的图片的存储路径。此时加载图片无论使用setImageBitmap还是setImageURI,显示的效果是一样的。
此时的显示结果截图如下:
这三张SD卡上的图片都是尺寸比较大的图片,此时的显示效果原因是这样的:GridView测了一下每张图片的高度和宽度。它希望每一个item都能完整显示要显示的内容,因此GridView会把item设置的跟要显示的内容一样大,但是GridView有列宽的设定,所以GridView只能把图片的宽度缩减到指定的列宽,然后将图片按照原来的宽高比在item中居中进行显示。但是因为没有设置行高(也没有地方指定GridView的行高),因此GridView将item的高度保留为要显示图片的原始高度!如果我们给item的布局文件加上scaleType属性为fitXY,就可以看到每一个item不同的高度:
所以,虽然我们给item设置了明确的80dp*80dp,但是作为父控件的GridView根本不管这一套,GridView会根据自己的原则来设定item的大小,这个原则跟要显示的图像大小有关。所以,为了真正达到希望的每一行item都能按照80dp*80dp来显示(不考虑GridView的strechMode对列宽的拉伸),我们有两种方式:1)改变一下GridView设置item大小的方式,或者2)改变一下item中加载图像的大小。
1)改变GridView设置item大小的方式:
<span style="font-family:KaiTi_GB2312;font-size:18px;"> int size = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 80, context.getResources().getDisplayMetrics()); if(cv == null){ cv = inflater.inflate(R.layout.item_layout, null); vh = new ViewHolder(); vh.cv = (ImageView) cv.findViewById(R.id.imageview); AbsListView.LayoutParams params = new AbsListView.LayoutParams(size, size); vh.cv.setLayoutParams(params); cv.setTag(vh); }else{ vh = (ViewHolder) cv.getTag(); }</span><span style="font-family:KaiTi_GB2312;font-size:18px;"> </span>2)也可以改变以下item中要加载的图像的大小
<span style="font-family:KaiTi_GB2312;font-size:18px;"> Bitmap bitmap = null;bitmap = BitmapFactory.decodeFile(getItem(position));bitmap = Bitmap.createScaledBitmap(bitmap, size, size,false);//这里的size值和1)中的size值获取方式一样,都是80dpvh.cv.setImageBitmap(bitmap);</span>上面两种方法选择一种就可以,此时显示的效果会如下所示:
- 控制GridView中的行高
- 控制GridView中选中的背景
- Gridview 设置行高
- js控制gridview 中的checkbox 全选
- js控制Gridview中的checkbox全选(转)
- js控制Gridview中的checkbox全选
- android gridview 行高设置
- 给GridView设置行高
- android gridview 行高设置
- JS控制GridView行选择
- IE10.Gridview后台设置行高
- 解决Android GridView行高问题
- UITextView,UILable 控制行高
- UITextView,UILable 控制行高
- Eclipse控制元素在文件中的高亮标记
- GridView CSS控制
- gridview 样式控制
- js控制gridview
- Linux系统分区
- Codeforces Bubble Cup 8 - Finals [Online Mirror] 解题报告
- 打开Dreamweaver出现配置错误的解决方法
- JVM运行时数据区域
- sting的方法总结
- 控制GridView中的行高
- Merge sort
- Android五大存储---外部存储(SD卡)
- SQL-----sql
- nginx集群的配置
- 如何把vivado中实时截取的debug信号保存下来
- 压缩文件:
- iOS数据持久化
- 09-07 Fragment(碎片续)、数据存储(Preference)