使用 TabHost + TabWidget 時,設定 layout_width="match_parent" 標籤擠在左側;改為 wrap_content 則寬度不一,無法平均分佈。
TabWidget 繼承 LinearLayout,但預設不自動分配子視圖寬度,需手動計算螢幕寬度並設定每個分頁的 LayoutParams。
private void setTabWidths(TabWidget tabWidget) {
WindowManager wm = getWindowManager();
Display display = wm.getDefaultDisplay();
int screenWidth = display.getWidth();
int tabCount = tabWidget.getChildCount();
int tabWidth = screenWidth / tabCount;
for (int i = 0; i < tabCount; i++) {
View tabView = tabWidget.getChildAt(i);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(tabWidth, LinearLayout.LayoutParams.MATCH_PARENT);
tabView.setLayoutParams(params);
}
}
// 在 onCreate 或 setContentView 後呼叫
setTabWidths((TabWidget) findViewById(android.R.id.tabs));
現代應用建議改用 com.google.android.material.tabs.TabLayout 搭配 ViewPager2,原生支援 tabMode="fixed" 與 tabGravity="fill" 實現完美平鋪:
<com.google.android.material.tabs.TabLayout
android:id="@+id/tabLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabMode="fixed"
app:tabGravity="fill" />
TabWidget 子視圖已建立後執行(如 setup() 之後)。android:singleLine="true" + android:ellipsize="end"。