Android 自定义GridView,解决嵌套Grideview的显示不完全的问题

解决嵌套Grideview的显示不完全的问题,在这里自定义一个GridView组件继承于原来的GridView,重写onMeasure方法重绘组件,然后替换布局文件中GridView布局即可。

package com.pumasoft.cakeboss.widget;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.GridView;

/** * @author: xiaolijuan * @description: 自定义GridView,解决嵌套Grideview的显示不完全的问题 * @date: 2016-03-14 * @time: 10:49 */
public class CustomGridView extends GridView {

    public CustomGridView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public CustomGridView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CustomGridView(Context context) {
        super(context);
    }

    /** * 其中onMeasure函数决定了组件显示的高度与宽度; * MeasureSpec.makeMeasureSpec函数中第一个参数指布局空间的大小,第二个参数是布局模式 * MeasureSpec.AT_MOST的意思就是子控件需要多大的控件就扩展到多大的空间 */
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
                MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, expandSpec);
    }

}

该自定义控件只是重写了GridView的onMeasure方法,现在只需要在布局文件中引入即可

<RelativeLayout         xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.xiaolijuan.gridviewdome.CustomGridView
        android:layout_width="match_parent"
        android:numColumns="3"
        android:layout_height="match_parent" />

</RelativeLayout>

重写的onMeasure方法决定了组件显示的高度与宽度,其中MeasureSpec.makeMeasureSpec函数中第一个参数指布局空间的大小,第二个参数是布局模式,下面说明一下MeasureSpec:
MeasureSpec封装了父布局传递给子布局的布局要求:
一、MeasureSpec一共有三种模式:
(1)EXACTLY(完全):一般是设置了明确的值或者是MATCH_PARENT,父元素决定了子元素的大小,子元素将被限定在给定的范围里而忽略它本身大小;
(2)AT_MOST(至多):表示子元素至多达到给定的一个最大值,一般为WARP_CONTENT;
(3)UNSPECIFIED(未指定):表示子布局想要多大就多大,很少使用;
 二、MeasureSpec常用的三个函数:
 (1)public static int makeMeasureSpec(int size,int mode):根据提供的大小值和模式创建一个测量值
 (2)public static int getSize(int measureSpec):获取这个测量值中表示的尺寸大小的值。
 (3)public static int getMode(int measureSpec):获取测量值中表示的模式(上述三个模式之一)
 (4)public static String toString(int measureSpec):获取测量值里面的模式和大小组成字符串返回来,方便打日志

你可能感兴趣的:(GridView,自定义控件,布局)