當整個 App 套用自訂主題(如 AppTheme)時,若想針對**個別 Activity** 隱藏標題欄,不能直接套用 @android:style/Theme.NoTitleBar(會覆蓋原主題所有屬性),正解是**建立子主題繼承原主題並覆蓋單一屬性**。
<resources>
<!-- 原有主題 -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<!-- 無標題子主題:繼承 AppTheme,僅覆蓋 windowNoTitle -->
<style name="AppTheme.NoTitle" parent="AppTheme">
<item name="android:windowNoTitle">true</item>
<!-- 若使用 AppCompat,建議同時設定 -->
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
</resources>
<activity
android:name=".FullScreenActivity"
android:theme="@style/AppTheme.NoTitle">
</activity>
parent="AppTheme":繼承原主題所有顏色、字型、形狀等屬性。android:windowNoTitle=true:僅覆蓋「無標題」這一項,其餘保持一致。windowActionBar=false + windowNoTitle=true:AppCompat 專用雙重保險,確保 Toolbar/ActionBar 完全隱藏。<style name="AppTheme.FullScreen" parent="AppTheme.NoTitle">
<item name="android:windowFullscreen">true</item>
<item name="android:windowContentOverlay">@null</item>
</style>
| 錯誤做法 | 後果 |
|---|---|
android:theme="@android:style/Theme.NoTitleBar" | 失去 AppTheme 所有自訂屬性(顏色、字型等) |
在 onCreate 呼叫 requestWindowFeature(Window.FEATURE_NO_TITLE) 但未在 setContentView 前 | 無效,甚至崩潰 |
同時套用 Theme.NoTitleBar 和自訂主題 | 屬性衝突、行為未定義 |
掌握「子主題繼承 + 單一屬性覆蓋」模式,不僅解決隱藏標題,也適用於任意主題微調(如更換單一 Activity 的背景色、字體大小等),保持風格一致且程式碼乾淨。