Android 9.0 SystemUI 主要视图 SystemBars

Android 9.0 SystemUI 主要视图 SystemBars,第1张

概述SystemBars是SystemUI主要视图,接下来看看它是如何呈现?基于AOSP9.0分析。SystemBars#startSystemBars启动中mServices[i].start()将调用SystemBars.start():public class SystemBars extends SystemUI {    //省略部分代码    private SystemUI mStatusBar

Systembars 是 systemUI 主要视图,接下来看看它是如何呈现?基于 AOSP 9.0 分析。

Systembars#start

Systembars 启动中 mServices[i].start() 将调用 Systembars.start():

public class Systembars extends systemUI {
    //省略部分代码
    private systemUI mStatusbar;

    @OverrIDe
    public voID start() {
        if (DEBUG) Log.d(TAG, "start");
        createStatusbarFromConfig();
    }

    //省略部分代码

    private voID createStatusbarFromConfig() {
        if (DEBUG) Log.d(TAG, "createStatusbarFromConfig");
        final String clsname = mContext.getString(R.string.config_statusbarComponent);
        if (clsname == null || clsname.length() == 0) {
            throw andLog("No status bar component configured", null);
        }
        Class<?> cls = null;
        try {
            cls = mContext.getClassLoader().loadClass(clsname);
        } catch (Throwable t) {
            throw andLog("Error loading status bar component: " + clsname, t);
        }
        try {
            mStatusbar = (systemUI) cls.newInstance();
        } catch (Throwable t) {
            throw andLog("Error creating status bar component: " + clsname, t);
        }
        mStatusbar.mContext = mContext;
        mStatusbar.mComponents = mComponents;
        mStatusbar.start();
        if (DEBUG) Log.d(TAG, "started " + mStatusbar.getClass().getSimplename());
    }

    //省略部分代码
}

这里 config_statusbarComponent 在 AOSP/frameworks/base/packages/systemUI/res/values/config.xml 里,值为:

<string name="config_statusbarComponent" translatable="false">com.androID.systemUI.statusbar.phone.Statusbar</string>

上面 mStatusbar.start() 通过反射机制 start 了 Statusbar。

Statusbar#start
@OverrIDe
public voID start() {
    mGroupManager = Dependency.get(NotificationGroupManager.class);
    mVisualStabilityManager = Dependency.get(VisualStabilityManager.class);
    mNotificationLogger = Dependency.get(NotificationLogger.class);
    //省略部分代码,主要是实例化
    //创建并添加视图
    createAndAddwindows();
    //省略其他代码
}
Statusbar#addStatusbarWindow

看 createAndAddwindows 方法,又调了 addStatusbarWindow:

public voID createAndAddwindows() {
    addStatusbarWindow();
}
private voID addStatusbarWindow() {
    makeStatusbarVIEw();
    //省略其他代码
}
Statusbar#makeStatusbarVIEw

makeStatusbarVIEw 是关键方法,创建 StatusbarVIEw,makeStatusbarVIEw 内容很多,本篇先看布局部分:

protected voID makeStatusbarVIEw() {
    final Context context = mContext;
    updatedisplaySize(); // populates mdisplayMetrics
    updateResources();
    updatetheme();
    //对应布局文件:super_status_bar.xml
    inflateStatusbarWindow(context);
    //省略其他代码
}
Statusbar#inflateStatusbarWindow
protected voID inflateStatusbarWindow(Context context) {
    mStatusbarWindow = (StatusbarWindowVIEw) VIEw.inflate(context,
            R.layout.super_status_bar, null);
}

super_status_bar.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"
            androID:layout_wIDth="match_parent"
            androID:layout_height="match_parent"
            androID:visibility="gone"
            sysui:ignoreRightInset="true"
            >
        <ImageVIEw androID:ID="@+ID/backdrop_back"
                   androID:layout_wIDth="match_parent"
                   androID:scaleType="centerCrop"
                   androID:layout_height="match_parent" />
        <ImageVIEw androID:ID="@+ID/backdrop_front"
                   androID:layout_wIDth="match_parent"
                   androID:layout_height="match_parent"
                   androID:scaleType="centerCrop"
                   androID:visibility="invisible" />
    </com.androID.systemUI.statusbar.BackDropVIEw>

    <com.androID.systemUI.statusbar.ScrimVIEw
        androID:ID="@+ID/scrim_behind"
        androID:layout_wIDth="match_parent"
        androID:layout_height="match_parent"
        androID:importantForAccessibility="no"
        sysui:ignoreRightInset="true"
        />
    <!--解锁,在桌面时状态栏,通知+系统icon-->
    <FrameLayout
        androID:ID="@+ID/status_bar_container"
        androID:layout_wIDth="match_parent"
        androID:layout_height="wrap_content" />

    <VIEwStub androID:ID="@+ID/fullscreen_user_switcher_stub"
              androID:layout="@layout/car_fullscreen_user_switcher"
              androID:layout_wIDth="match_parent"
              androID:layout_height="match_parent"/>
    <!--包含锁屏布局和下拉状态栏布局-->
    <include layout="@layout/status_bar_expanded"
        androID:layout_wIDth="match_parent"
        androID:layout_height="match_parent"
        androID:visibility="invisible" />
    <!--下拉全部状态栏亮度布局-->
    <include layout="@layout/brightness_mirror" />

    <com.androID.systemUI.statusbar.ScrimVIEw
        androID:ID="@+ID/scrim_in_front"
        androID:layout_wIDth="match_parent"
        androID:layout_height="match_parent"
        androID:importantForAccessibility="no"
        sysui:ignoreRightInset="true"
        />

</com.androID.systemUI.statusbar.phone.StatusbarWindowVIEw>
视图

下面具体看看视图,有图有真相,更加直观。

桌面


1、CollapsedStatusbarFragment,status_bar.xml,PhonestatusbarVIEw,折叠状态栏,包含左边时间通知和右边系统 icon
2、NavigationbarFragment,navigation_bar.xml,底部导航栏
下拉状态栏


1、quick_status_bar_expanded_header.xml
1.1、quick_status_bar_header_system_icons.xml,时间和电量
1.2、quick_qs_status_icons.xml,日期和系统 icon
1.3、QuickQSPanel,quick_status_bar_expanded_header.xml,@+ID/quick_qs_panel,快捷设置
2、NotificationStackScrollLayout,@+ID/notification_stack_scroller,通知
3、status_bar_notification_footer.xml,通知管理和 clear all
下拉全部状态栏


1、quick_settings_brightness_dialog.xml,亮度设置
2、QSPanel,qs_panel.xml,@+ID/quick_settings_panel,快捷设置
3、qs_footer_impl.xml,快捷设置排序和设置入口
锁屏

增加锁屏模式为 Swipe:


整个布局,NotificationPanelVIEw,status_bar_expanded.xml
1、KeyguardStatusbarVIEw,keyguard_status_bar.xml ,状态栏
2、KeyguardStatusVIEw,keyguard_status_vIEw.xml ,时间和日期
3、NotificationStackScrollLayout,@+ID/notification_stack_scroller,通知
4、KeyguardBottomAreaVIEw,keyguard_bottom_area.xml,底部解锁
结语

好了,这篇结束了,主要学习 Statusbar 相关布局在哪里写了,先有个直观认识。

总结

以上是内存溢出为你收集整理的Android 9.0 SystemUI 主要视图 SystemBars全部内容,希望文章能够帮你解决Android 9.0 SystemUI 主要视图 SystemBars所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1006984.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存