返回介绍

ActionBar的覆蓋層疊

发布于 2020-04-01 13:16:42 字数 3817 浏览 1056 评论 0 收藏 0

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

默認情況下,action bar 顯示在 activity 窗口的頂部,會稍微地減少其他佈局的有效空間。如果在用戶交互過程中要隱藏和顯示 action bar,可以通過調用 ActionBar 中的 hide()show()來實現。但是,這將導致 activity 基於新尺寸重新計算與繪製佈局。

為避免在 action bar 隱藏和顯示過程中調整佈局的大小,可以為 action bar 啟用疊加模式(overlay mode)。在疊加模式下,所有可用的空間都會被用來佈局就像ActionBar不存在一樣,並且 action bar 會疊加在佈局之上。這樣佈局頂部就會有點被遮擋,但當 action bar 隱藏或顯示時,系統不再需要調整佈局而是無縫過渡。

Note:如果希望 action bar 下面的佈局部分可見,可以創建一個背景部分透明的自定義式樣的 action bar,如圖 1 所示。關於如何定義 action bar 的背景,請查看 自定義ActionBar的風格。

actionbar-overlay@2x

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

啟用疊加模式(Overlay Mode)

要為 action bar 啟用疊加模式,需要自定義一個主題,該主題繼承於已經存在的 action bar 主題,並設置 android:windowActionBarOverlay 屬性的值為 true

僅支持 Android 3.0 和以上

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

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

支持 Android 2.1 和更高

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

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

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

注意,該主題包含兩種不同的 windowActionBarOverlay 式樣定義:一個帶 android: 前綴,另一個不帶。帶前綴的適用於包含該式樣的 Android 系統版本,不帶前綴的適用於通過從 Support 庫中讀取式樣的舊版本。

指定佈局的頂部邊距

當 action bar 啟用疊加模式時,它可能會遮擋住本應保持可見狀態的佈局。為了確保這些佈局始終位於 action bar 下部,可以使用 actionBarSize 屬性來指定頂部margin或padding的高度來到達。例如:

<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 庫,需要移除 android: 前綴。例如:

<!-- 兼容支持庫 -->
<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 和更高的所有版本。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文