Android 12 MTK SystemUI 定制化开发系列(3) 之 status_bar.xml详解

文章目录


前言

把 status_bar.xml  单独用一期详解下, 这个布局嵌套很深,网上基本找不到详解这个布局的, 但这个布局 个人觉得很重要,对小白很有帮助或维护SystemUI的同僚多少都会有点帮助吧!


一、status_bar.xml  路径

vendor/mediatek/proprietary/packages/apps/SystemUI/res/layout/status_bar.xml

二、status_bar.xml 布局详解

 

<com.android.systemui.statusbar.phone.PhoneStatusBarView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:systemui="http://schemas.android.com/apk/res/com.android.systemui"
    android:id="@+id/status_bar"
    android:layout_width="match_parent"
    android:layout_height="@dimen/status_bar_height"
    android:accessibilityPaneTitle="@string/status_bar"
    android:descendantFocusability="afterDescendants"
    android:focusable="false"
    android:orientation="vertical">

    <!-- 如果存在活跃通知并且Flag为STEM_UI_FLAG_LOW_PROFILE情况下
         会显示一个点,全屏提示当前存在的通知-->
    <ImageView
        android:id="@+id/notification_lights_out"
        android:layout_width="@dimen/status_bar_icon_size"
        android:layout_height="match_parent"
        android:paddingStart="@dimen/status_bar_padding_start"
        android:paddingBottom="2dip"
        android:scaleType="center"
        android:src="@drawable/ic_sysbar_lights_out_dot_small"
        android:visibility="gone" />

    <LinearLayout
        android:id="@+id/status_bar_contents"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        android:paddingStart="@dimen/status_bar_padding_start"
        android:paddingTop="@dimen/status_bar_padding_top"
        android:paddingEnd="@dimen/status_bar_padding_end">

        <FrameLayout
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1">

            <!-- 悬浮式通知 -->
            <include layout="@layout/heads_up_status_bar_layout" />

            <!-- 左侧的alpha由PhoneStatusBarTransitions控制,各个视图由StatusBarManager禁用标志disable_CLOCK
                 和分别为DISABLE_NOTIFICATION_ICONS -->
            <LinearLayout
                android:id="@+id/status_bar_left_side"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:clipChildren="false">

                <!-- 状态栏显示运营商信息,需设置 config_showOperatorNameInStatusBar为true  -->
                <ViewStub
                    android:id="@+id/operator_name"
                    android:layout_width="wrap_content"
                    android:layout_height="match_parent"
                    android:layout="@layout/operator_name" />

                <!-- 时钟图标 -->
                <com.android.systemui.statusbar.policy.Clock
                    android:id="@+id/clock"
                    android:layout_width="wrap_content"
                    android:layout_height="match_parent"
                    android:gravity="center_vertical|start"
                    android:paddingStart="@dimen/status_bar_left_clock_starting_padding"
                    android:paddingEnd="@dimen/status_bar_left_clock_end_padding"
                    android:singleLine="true"
                    android:textAppearance="@style/TextAppearance.StatusBar.Clock" />

                <!-- 录音机图标 -->
                <include layout="@layout/ongoing_call_chip" />

                <!-- 通知图标区域 -->
                <com.android.systemui.statusbar.AlphaOptimizedFrameLayout
                    android:id="@+id/notification_icon_area"
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:clipChildren="false"
                    android:orientation="horizontal" />

            </LinearLayout>
        </FrameLayout>

        <!-- 如果是刘海屏,会在updateLayoutForCutout方法里设置区域范围-->
        <android.widget.Space
            android:id="@+id/cutout_space_view"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:gravity="center_horizontal|center_vertical" />

        <com.android.systemui.statusbar.AlphaOptimizedFrameLayout
            android:id="@+id/centered_icon_area"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:clipChildren="false"
            android:gravity="center_horizontal|center_vertical"
            android:orientation="horizontal" />

        <!-- 系统图标区域,主要包含了system_icon.xml 注:状态跟锁屏都是复用此布局-->
        <com.android.keyguard.AlphaOptimizedLinearLayout
            android:id="@+id/system_icon_area"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:gravity="center_vertical|end"
            android:orientation="horizontal">

            <include layout="@layout/system_icons" />
        </com.android.keyguard.AlphaOptimizedLinearLayout>
    </LinearLayout>

    <!-- 显示界面信息 -->
    <ViewStub
        android:id="@+id/emergency_cryptkeeper_text"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout="@layout/emergency_cryptkeeper_text" />

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

总结

关键的布局都标注了,方便大家初步了解这个布局结构!

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值