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では、タブレイアウトにはこれらのプロパティがあります
<android.support.design.widget.TabLayout
android:id="@+id/sliding_tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabMaxWidth="0dp"
/>