今天在项目的主页面遇到了scrollview中嵌套viewpager出现的兼容问题,问题起因:因为主页面内容过多,所以采用scrollview滚动,并且在主页面还有个viewpager中嵌套girdview,那么问题来了,第一:ViewPager不能显示,第二:ViewPager不能滑动
解决问题一:
一开始我的ViewPager是自适应高度的
<android.support.v4.view.ViewPager
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp" >
</android.support.v4.view.ViewPager>
最简单的方法把高度写死,但是我的数据又是从后台获取过来的,所以肯定不能写死,那么我就想到了一个折中的办法。在代码中直接算出height的值。。。(怎么算根据自己的项目定)
RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) mViewPager
.getLayoutParams();
int widthSigle = (mScreenWidth - 16) / 5;
int num = mList.size() % 5 == 0 ? mList.size() / 5: mList.size() / 5 + 1;
layoutParams.height = (num - 1) * 4 + widthSigle * num;
mViewPager.setLayoutParams(layoutParams);
这个问题有其他多种解法,但是我这个是最简单的也是最笨的~
解决问题二:
开开心心解决了第一个,运行起来又发现ViewPager不能滑动了。。问题归结于girdview和ViewPager的滑动会出现冲突,所以得重写girdview,实其不获得焦点
public class GridMainView extends GridView {
public GridMainView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public GridMainView(Context context) {
super(context);
}
public GridMainView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}
到这里就可以大功告成,祝大家顺利