对于刚入职场的菜鸟,最近做项目有点蛋疼。各种问题扑面而来...
我直接贴上代码吧,国外码农写的,我自个也没时间去研究。在布局中直接引用就行了,希望对大家也有帮助。后期有时间就去研究下哈!
import android.content.Context; import android.support.v4.view.ViewPager; import android.util.AttributeSet; import android.view.View; /** * @description 重新计算ViewPager的高度 */ 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; } }