今天做了的项目中.用了tabhost,然后下边切换部分用的viewPager.当我把viewPager设置为wrap_content的时候,发现.怎么也不能显示其中的子内容.然后百度一顿搜.没找到真正能完成的结果.然后google.在stackflow里发现了老外解决了该问题.下边把代码下!
/**
* ViewPager wrapContent解决方案
*/
public class WrapContentHeightViewPager extends ViewPager {/**
* Constructor
*
* @param context the context
*/
public WrapContentHeightViewPager(Context context) {
super(context);
}
/**
* Constructor
*
* @param context the context
* @param attrs the attribute set
*/
public WrapContentHeightViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
// @Override// protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {// super.onMeasure(widthMeasureSpec, heightMeasureSpec);//
// // find the first child view// View view = getChildAt(0);// if (view != null) {// // measure the first child view with the specified measure spec// view.measure(widthMeasureSpec, heightMeasureSpec);// }//
// setMeasuredDimension(getMeasuredWidth(), measureHeight(heightMeasureSpec, view));// }
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int height = 0;
for(int i = 0; i < getChildCount(); i++) {
View child = getChildAt(i);
child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
int h = child.getMeasuredHeight();
if(h > height) height = h;
}
heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
/**
* Determines the height of this view
*
* @param measureSpec A measureSpec packed into an int
* @param view the base view with already measured height
*
* @return The height of the view, honoring constraints from measureSpec
*/
private int measureHeight(int measureSpec, View view) {
int result = 0;
int specMode = MeasureSpec.getMode(measureSpec);
int specSize = MeasureSpec.getSize(measureSpec);
if (specMode == MeasureSpec.EXACTLY) {
result = specSize;
} else {
// set the height from the base view if available
if (view != null) {
result = view.getMeasuredHeight();
}
if (specMode == MeasureSpec.AT_MOST) {
result = Math.min(result, specSize);
}
}
return result;
}
}
转载自:
http://www.tuicool.com/articles/2YrmE3