我使用了与 Jayesh 非常相似的解决方案,但我的解决方案使用了选项卡的最小宽度,并基于此计算要使用的模式。这样,您只需要知道标签可接受的最小尺寸是多少。如果它们都适合有多余的空间,它会将它们伸展以填满所有空间,如果太多,它将使它们成为最小宽度并切换到可滚动。
DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
float dpWidth = displayMetrics.widthPixels / displayMetrics.density;
//For some reason, setting minWidth in xml and then accessing it here doesn't work, returns 0
int minWidth = 80;
tabLayout.setMinimumWidth(minWidth);
//If there are less tabs than needed to necessitate scrolling, set to fixed/fill
if(tabLayout.getTabCount() < dpWidth/minWidth){
tabLayout.setTabMode(TabLayout.MODE_FIXED);
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
}else{
//Otherwise, set to scrollable
tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);
}
在xml中,Tablayout只有这些属性
<android.support.design.widget.TabLayout
android:id="@+id/sliding_tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabMaxWidth="0dp"
/>