Tabs don't fit to screen with tabmode=scrollable, Even with a Custom Tab Layout

后端 未结 3 1660
轻奢々
轻奢々 2020-12-04 00:01

I have made a custom TabLayout with a ViewPager and am using the TabLayout in scrollable mode:

I need it to be scrollable as the number of dates can var

3条回答
  •  悲哀的现实
    2020-12-04 00:42

    I looked all over for an answer to this exact problem. In my case I was dynamically adding and removing tabs, so I wanted it to fill the screen when there were only a few tabs, but start scrolling when there were too many rather than shrinking them or putting the titles on two lines. Using the following custom tab layout finally got it working for me. It was key to set the minimum width before calling super.onMeasure().

    public class CustomTabLayout extends TabLayout {
    
        public CustomTabLayout(Context context) {
            super(context);
        }
    
        public CustomTabLayout(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        public CustomTabLayout(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
        }
    
        @Override
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    
            ViewGroup tabLayout = (ViewGroup)getChildAt(0);
            int childCount = tabLayout.getChildCount();
    
            if( childCount != 0 ) { 
                DisplayMetrics displayMetrics = getContext().getResources().getDisplayMetrics();
                int tabMinWidth = displayMetrics.widthPixels/childCount;
    
                for(int i = 0; i < childCount; ++i){
                    tabLayout.getChildAt(i).setMinimumWidth(tabMinWidth);
                }
            }
    
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        }
    }
    

    Set the tab mode to scrollable in the xml.

        
    

提交回复
热议问题