1、问题:想通过LisView和GridView的wrap_content实现自适应大小。
解决办法:自定义View继承自GridView或者ListView,然后重写他们的方法:onMeasure。
- 核心代码如下:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandHeightMeasureSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandHeightMeasureSpec);
}
2、recyclerView的wrap_content
方法一:recyclerView的wrap_content属性已经在23.2版本得到解决,因此只需在gradle文件中加入:
compile ‘com.android.support:recyclerview-v7:23.2.1’ 代码即可方法二:自定义LayoutManager,复写OnMeasure方法,如下:
@Override
public void onMeasure(Recycler recycler, State state, int widthSpec,int heightSpec) {
View view = recycler.getViewForPosition(0);
if(view != null){
measureChild(view, widthSpec, heightSpec);
int measuredWidth = MeasureSpec.getSize(widthSpec);
int measuredHeight = view.getMeasuredHeight();
setMeasuredDimension(measuredWidth, measuredHeight);
}
}