底部TabLayout不显示

底部TabLayout不显示_第1张图片

如图,tabLayout结合viewPager结合使用后,tabLayout不显示。

网上搜了下,说是setupWithViewPager的设置顺序导致的,这一点其实我也想到了,可顺序调整后底部tab还是不显示。

看了下预览视图,发现tablayout被viewpager挤出去了。what?viewpager不是设置成wrap_content吗,怎么效果是match_parent。

于是看了一下ViewPager的源码,定位到ViewPager的onMeasure中查看:

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    // For simple implementation, our internal size is always 0.
    // We depend on the container to specify the layout size of
    // our view.  We can't really know what it is since we will be
    // adding and removing different arbitrary views and do not
    // want the layout to change as this happens.
    setMeasuredDimension(getDefaultSize(0, widthMeasureSpec),
            getDefaultSize(0, heightMeasureSpec));

    final int measuredWidth = getMeasuredWidth();
    final int maxGutterSize = measuredWidth / 10;
    mGutterSize = Math.min(maxGutterSize, mDefaultGutterSize);
    ...
}


从注释可以看到,viewPager默认的size都是0,然后优先用父布局传过来的宽高,其效果就是宽高没有指定的话就相当于match_parent,完全不考虑子view的属性,因为子view可以被动态的添加或删除,宽高可能是不确定的。 

网上都说要重写onMeasure方法,其实不需要,有个简便方法,就是把wrap_content改成0dp,weight设置成1,这样就好了。不要问我是怎么想到的,灵感来了就是这么6。

 
    

扫码关注我吧:

你可能感兴趣的:(Android)