GridView 自适应高度
前段时间在使用RecycleView嵌套GridView时出现了一点问题,记录一下!
遇到的问题
外层是一个RecycleView,RecycleView的每个item是一个GridView。
运行时发现每个item只显示了一行数据,我当时还以为是数据出现了问题,结果查看完log后发现数据是全部加载完的,最后才看到GridView的高度设置成 wrap_content时就会显示1行数据,设置成 match_parent 时,每条item的间距又太大了,设置成固定的值?但是每个item的内容不一致,有的多有的少,这。。。
自定义view呗,要不咋整?
解决方案
1 public class AutoGridView extends GridView { 2 3 public AutoGridView(Context context) { 4 super(context); 5 } 6 7 public AutoGridView(Context context, AttributeSet attrs) { 8 super(context, attrs); 9 } 10 11 public AutoGridView(Context context, AttributeSet attrs, int defStyleAttr) { 12 super(context, attrs, defStyleAttr); 13 } 14 15 /** 16 * 改写gridview高度为自适应 17 * 18 * @param widthMeasureSpec 19 * @param heightMeasureSpec 20 */ 21 @Override 22 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 23 int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, 24 MeasureSpec.AT_MOST); 25 super.onMeasure(widthMeasureSpec, expandSpec); 26 } 27 }
完美解决!!
GridView的一些特殊属性:
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)