Android ActionBar的覆蓋疊加

2018-08-02 18:33 更新

編寫(xiě):Vincent 4J - 原文:http://developer.android.com/training/basics/actionbar/overlaying.html

默認(rèn)情況下,action bar 顯示在 activity 窗口的頂部,會(huì)稍微地減少其他布局的有效空間。如果在用戶交互過(guò)程中要隱藏和顯示 action bar,可以通過(guò)調(diào)用 ActionBar 中的 hide()show()來(lái)實(shí)現(xiàn)。但是,這將導(dǎo)致 activity 基于新尺寸重新計(jì)算與繪制布局。

為避免在 action bar 隱藏和顯示過(guò)程中調(diào)整布局的大小,可以為 action bar 啟用疊加模式(overlay mode)。在疊加模式下,所有可用的空間都會(huì)被用來(lái)布局就像ActionBar不存在一樣,并且 action bar 會(huì)疊加在布局之上。這樣布局頂部就會(huì)有點(diǎn)被遮擋,但當(dāng) action bar 隱藏或顯示時(shí),系統(tǒng)不再需要調(diào)整布局而是無(wú)縫過(guò)渡。

Note:如果希望 action bar 下面的布局部分可見(jiàn),可以創(chuàng)建一個(gè)背景部分透明的自定義式樣的 action bar,如圖 1 所示。關(guān)于如何定義 action bar 的背景,請(qǐng)查看 自定義ActionBar的風(fēng)格。

actionbar-overlay@2x

圖 1. 疊加模式下的 gallery action bar

啟用疊加模式(Overlay Mode)

要為 action bar 啟用疊加模式,需要自定義一個(gè)主題,該主題繼承于已經(jīng)存在的 action bar 主題,并設(shè)置 android:windowActionBarOverlay 屬性的值為 true。

僅支持 Android 3.0 和以上

如果 minSdkVersion 為 11 或更高,自定義主題必須繼承 Theme.Holo 主題(或者其子主題)。例如:

<resources>
    <!-- 為程序或者活動(dòng)應(yīng)用的主題樣式 -->
    <style name="CustomActionBarTheme"
           parent="@android:style/Theme.Holo">
        <item name="android:windowActionBarOverlay">true</item>
    </style>
</resources>

支持 Android 2.1 和更高

如果為了兼容運(yùn)行在 Android 3.0 以下版本的設(shè)備而使用了 Support 庫(kù),自定義主題必須繼承 Theme.AppCompat 主題(或者其子主題)。例如:

<resources>
    <!-- 為程序或者活動(dòng)應(yīng)用的主題樣式 -->
    <style name="CustomActionBarTheme"
           parent="@android:style/Theme.AppCompat">
        <item name="android:windowActionBarOverlay">true</item>

        <!-- 兼容支持庫(kù) -->
        <item name="windowActionBarOverlay">true</item>
    </style>
</resources>

注意,該主題包含兩種不同的 windowActionBarOverlay 式樣定義:一個(gè)帶 android: 前綴,另一個(gè)不帶。帶前綴的適用于包含該式樣的 Android 系統(tǒng)版本,不帶前綴的適用于通過(guò)從 Support 庫(kù)中讀取式樣的舊版本。

指定布局的頂部邊距

當(dāng) action bar 啟用疊加模式時(shí),它可能會(huì)遮擋住本應(yīng)保持可見(jiàn)狀態(tài)的布局。為了確保這些布局始終位于 action bar 下部,可以使用 actionBarSize 屬性來(lái)指定頂部margin或padding的高度來(lái)到達(dá)。例如:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingTop="?android:attr/actionBarSize">
    ...
</RelativeLayout>

如果在 action bar 中使用 Support 庫(kù),需要移除 android: 前綴。例如:

<!-- 兼容支持庫(kù) -->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingTop="?attr/actionBarSize">
    ...
</RelativeLayout>

在這種情況下,不帶前綴的 ?attr/actionBarSize 適用于包括Android 3.0 和更高的所有版本。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)