最近产品提了一个需求,要求把首页的导航按钮改成和美团类似的可翻页的GridView。
乍一看,这不就是ViewPager嵌套两个GridView吗,简单简单。简单的答应后,我就掉进了控件嵌套的大坑中。
简单的写好代码后,满心欢喜的运行程序,咦???我的ViewPager去哪了?GridView呢?(黑人问号)在一番努力之后,我终于找到了问题的原因,当Viewpager和GridView嵌套时,如果ViewPager的高度设置成warp_content,会导致控件不显示。解决这个问题有两个方案。
一、既然warp_content不行,那么给ViewPager直接设置一个高度!搞定,简单省事,不过这样有一个缺点,就是没法保证所有机型适配,而且有时候GridView内容多,有两行并分页,有时候内容少,只有一行,那么就会空出一部分的高度,导致界面不美观。
二、上面的方法有点太简单粗暴了,这里就介绍一下我现在用的方法,自定义一个ViewPager,在onMeasure中计算他的子View的高度,取最高的来作为自己的高度。代码如下
/** * 根据测量的子view设置pager高度 * @param widthMeasureSpec * @param heightMeasureSpec */