自定义Gridview和LIstview解决现实不全的问题

package com.example.acer.mymusic.View;

import android.annotation.TargetApi;

import android.content.Context;

import android.os.Build;

import android.util.AttributeSet;

import android.widget.ListView;

/**

* Created by kang on 2018/3/15.

*/

public class MyListViewextends ListView

{

public MyListView(Context context) {

super(context);

}

public MyListView(Context context, AttributeSet attrs) {

super(context, attrs);

}

public MyListView(Context context, AttributeSet attrs,int defStyleAttr) {

super(context, attrs, defStyleAttr);

}

@TargetApi(Build.VERSION_CODES.LOLLIPOP)

public MyListView(Context context, AttributeSet attrs,int defStyleAttr,int defStyleRes) {

super(context, attrs, defStyleAttr, defStyleRes);

}

@Override

    protected void onMeasure(int widthMeasureSpec,int heightMeasureSpec) {

int newHeightMeasureSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE>>2,// 设计一个较大的值和AT_MOST模式

                MeasureSpec.AT_MOST);

super.onMeasure(widthMeasureSpec, newHeightMeasureSpec);//再调用原方法测量

    }

}


这个是MyListview

package com.example.acer.mymusic.View;

import android.content.Context;

import android.util.AttributeSet;

import android.widget.GridView;

/**

* Created by kang on 2018/4/6.

*/

public class GrideViewScrollextends GridView

{

public GrideViewScroll(Context context) {

super(context);

}

public GrideViewScroll(Context context, AttributeSet attrs) {

super(context, attrs);

}

public GrideViewScroll(Context context, AttributeSet attrs,int defStyleAttr) {

super(context, attrs, defStyleAttr);

}

///测量高度 MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,

/// MeasureSpec.AT_MOST)就是生成一个符合MeasureSpec的一个32位的包含测量模式和测量高度的int值

    @Override

    protected void onMeasure(int widthMeasureSpec,int heightMeasureSpec)

{

int expend= MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >>2,MeasureSpec.AT_MOST);

super.onMeasure(widthMeasureSpec, expend);

}

}


这个可以放在帮助类里面。都可以进行调用。其中这两个方法法里面都有着onMeasure这个方法,


这个是用来测量高度的。其实问题的本质是,无法判断高度上。但是如果重写后便可以在原本的onMeasure上做文章


记住这两个方法,外面都需要嵌套一个Scrollview。那么这个onMeasure方法是如何起作用的??


点进去,你就可以看到,其实里面的过程如果你看不懂也没关系,我也不怎么看的懂。不过,最终他返回的是


一个适合测量模式和测量高度的一个int值。

你可能感兴趣的:(自定义Gridview和LIstview解决现实不全的问题)