Notification SystemUI 记录

796 阅读1分钟

布局说明

布局说明.png

锁屏通知流程 9.0可以参考

image.png

Notification 流程

image.png

根布局,整个SystemUI视图是由super_status_bar.xml创建的。这个布局include了一个status_bar_expanded.xml布局,这是整个下拉通知面版,包括滑动锁屏的各种控件

<com.android.systemui.statusbar.phone.StatusBarWindowView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:sysui="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

    <com.android.systemui.statusbar.BackDropView
            android:id="@+id/backdrop">
        <ImageView android:id="@+id/backdrop_back" />
        <ImageView android:id="@+id/backdrop_front"/>
    </com.android.systemui.statusbar.BackDropView>

    <com.android.systemui.statusbar.ScrimView
        android:id="@+id/scrim_behind"
        />

    <!--状态栏容器-->
    <FrameLayout
        android:id="@+id/status_bar_container" />

    <!--整个下拉通知面版,包括滑动锁屏界面-->
    <include layout="@layout/status_bar_expanded" />

    <!--这里亮度调节bar-->
    <include layout="@layout/brightness_mirror" />

    <com.android.systemui.statusbar.ScrimView
        android:id="@+id/scrim_in_front"/>

    <!--在锁屏界面,显示在状态栏之下,显示在时间之上-->
    <LinearLayout
        android:id="@+id/lock_icon_container">
        <com.android.systemui.statusbar.phone.LockIcon
            android:id="@+id/lock_icon" />
        <com.android.keyguard.KeyguardMessageArea
            android:id="@+id/keyguard_message_area" />
    </LinearLayout>
</com.android.systemui.statusbar.phone.StatusBarWindowView>

status_bar_expanded.xml

    android:id="@+id/notification_panel" >

    <FrameLayout
        android:id="@+id/big_clock_container" />

    <!--滑动锁屏界面状态视图: 时间,日期-->
    <include
        layout="@layout/keyguard_status_view"
        android:visibility="gone" />

    <com.android.systemui.statusbar.phone.NotificationsQuickSettingsContainer
        android:id="@+id/notification_container_parent">

        <include layout="@layout/dock_info_overlay" />
        
        <!--QS界面-->
        <FrameLayout
            android:id="@+id/qs_frame"
            android:layout="@layout/qs_panel" />
            
        <!--显示通知的容器-->
        <com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout
            android:id="@+id/notification_stack_scroller"/>

        <include layout="@layout/ambient_indication"
            android:id="@+id/ambient_indication_container" />

        <ViewStub
            android:id="@+id/keyguard_user_switcher" />

        <!--滑动锁屏状态栏-->
        <include
            layout="@layout/keyguard_status_bar"
            android:visibility="invisible" />

        <Button
            android:id="@+id/report_rejected_touch" />

    </com.android.systemui.statusbar.phone.NotificationsQuickSettingsContainer>

    <!--这里锁屏底部图标, 填充整个父布局,例如左下角的图标,右下角的图标Camera-->
    <include
        layout="@layout/keyguard_bottom_area"
        android:visibility="gone" />

    <com.android.systemui.statusbar.AlphaOptimizedView
        android:id="@+id/qs_navbar_scrim"/>

</com.android.systemui.statusbar.phone.NotificationPanelView>

SystemUI 开发之通知的实现逻辑(四

Android 9.0 SystemUI Notification

AndroidQ SystemUI之插件化机制Plugin SystemUI之滑动锁屏的创建

Android SystemUI & Keyguard原理分析,加个“摇一摇”解锁