1. 程式人生 > >使用appcompat_v7,定義activity全屏或無標題欄

使用appcompat_v7,定義activity全屏或無標題欄

       我剛開始使用Google新推出的appcompat_v7的時候,發現當專案引用這個相容專案並且Activity繼承ActionBarActivity後,就必須使用Theme.Appcompat系列的Style才行,不然程式執行會報錯的。

       換個主題好說,於是把程式的Style換了,程式執行就不報錯了。但是問題又來了,我要Activity不顯示標題欄,但是Theme.Appcompat系列的主題中就沒有NoTitleBar之類的,那怎麼設定主題呢?

       我試著自己在Styles.xml檔案中自己寫了一個MyAppTheme,如下:

    <!--
        Base application theme, dependent on API level. This theme is replaced
        by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
    -->
    <style name="AppBaseTheme" parent="Theme.AppCompat.Light">
        <!--
            Theme customizations available in newer API levels can go in
            res/values-vXX/styles.xml, while customizations related to
            backward-compatibility can go here.
        -->
    </style>

    <!-- Application theme. -->
    <style name="AppTheme" parent="AppBaseTheme">
        <!-- All customizations that are NOT specific to a particular API-level can go here. -->
    </style>

    <!-- Activity無標題欄 開始-->
    <style name="MyAppTheme" parent="AppTheme">
        <item name="android:windowNoTitle">true</item>
    </style>
    <!-- Activity無標題欄 結束-->

注意AppBaseTheme我改成了Theme.AppCompat.Light,並且要把values-v11和values-v14資料夾中的styles.xml裡的AppBaseTheme也一起修改掉)。

       修改後,在AndroidManifest.xml檔案中,把application節點的android:theme屬性設定為“@style/MyAppTheme”。

       然後在我的手機上執行起來,OK,沒有問題,確實標題欄沒有了,達到了我想要的效果。

       不過還沒完,我又把我的兩個安卓虛擬機器跑起來,系統版本分別是4.4.2和2.3.3,放到虛擬機器上測試。4.4.2的虛擬機器沒問題,顯示效果跟真機一樣,但是2.3.3就沒用了,還是有標題欄存在……奇怪

       後來又試了半天無果,跑到stackoverflow上面查了一下,終於有收穫了。發現應該是2.x的系統下style還需要windowActionBar的屬性設定為false才行,修改後的MyAppTheme如下:

    <!-- Activity無標題欄 開始-->
    <style name="MyAppTheme" parent="AppTheme">
        <item name="android:windowNoTitle">true</item>
        <item name="windowActionBar">false</item>
    </style>
    <!-- Activity無標題欄 結束-->
       再用2.3.3的虛擬機器測試,OK,不會顯示標題欄了,並且4.x的虛擬機器上也沒有問題。

       如果還需要全屏的效果,再給style中加上如下的兩個屬性就行了:

    <item name="android:windowFullscreen">true</item>
    <item name="android:windowContentOverlay">@null</item>

       StackOverflow上關於該問題討論的地址:Full Screen Theme for AppCompact (樓主是想同時把標題欄和頂部狀態列都隱藏了,做成全屏)


       P.s.最後順便附上Theme.Appcompat使用Dialog型別Activity的Style:

       (如果直接使用Theme.Base.AppCompat.Light.DialogWhenLarge(或者Theme.Base.AppCompat.Dialog.Light.FixedSize),Activity雖然是Dialog型別的,但是會有標題欄存在

    <!-- Dialog型別的Activity 開始-->
    <style name="MyDialogTheme" parent="Theme.Base.AppCompat.Light.DialogWhenLarge">
        <item name="android:windowNoTitle">true</item>
    </style>
    <!-- Dialog型別的Activity 結束-->