android9.0 修改状态栏图标的顺序

原理

com.android.systemui.statusbar.phone/StatusBarIconControllerImpl.java类的构造方法中读取
com.android.internal.R.array.config_statusBarIcons,按照此数组的顺序排序,如果需要修改顺序,则需要修改此文件。

 public StatusBarIconControllerImpl(Context context) {
        super(context.getResources().getStringArray(
                com.android.internal.R.array.config_statusBarIcons), context);
        Dependency.get(ConfigurationController.class).addCallback(this);

        mContext = context;

        loadDimens();

        SysUiServiceProvider.getComponent(context, CommandQueue.class)
                .addCallbacks(this);
        Dependency.get(TunerService.class).addTunable(this, ICON_BLACKLIST);

    }

/frameworks/base/core/res/res/values/config.xml

 <string-array name="config_statusBarIcons">
        <item><xliff:g id="id">@string/status_bar_alarm_clock</xliff:g></item>
        <item><xliff:g id="id">@string/status_bar_rotate</xliff:g></item>
        <item><xliff:g id="id">@string/status_bar_headset</xliff:g></item>
        <item><xliff:g id="id">@string/status_bar_data_saver</xliff:g></item>
        <item><xliff:g id="id">@string/status_bar_ime</xliff:g></item>
        <item><xliff:g id="id">@string/status_bar_sync_failing</xliff:g></item>
        <item><xliff:g id="id">@string/status_bar_sync_active</xliff:g></item>
        <item><xliff:g id="id">@string/status_bar_nfc</xliff:g></item>
        <item><xliff:g id="id">@string/status_bar_tty</xliff:g></item>
        <item><xliff:g id="id">@string/status_bar_speakerphone</xliff:g></item>
        <item><xliff:g id="id">@string/status_bar_cdma_eri</xliff:g></item>
        <item><xliff:g id="id">@string/status_bar_data_connection</xliff:g></item>
        <item><xliff:g id="id">@string/status_bar_phone_evdo_signal</xliff:g></item>
        <item><xliff:g id="id">@string/status_bar_phone_signal</xliff:g></item>
        <item><xliff:g id="id">@string/status_bar_secure</xliff:g></item>
        <item><xliff:g id="id">@string/status_bar_bluetooth</xliff:g></item>
        <item><xliff:g id="id">@string/status_bar_managed_profile</xliff:g></item>
        <item><xliff:g id="id">@string/status_bar_cast</xliff:g></item>
        <item><xliff:g id="id">@string/status_bar_vpn</xliff:g></item>
        <item><xliff:g id="id">@string/status_bar_mute</xliff:g></item>
        <item><xliff:g id="id">@string/status_bar_volume</xliff:g></item>
        <item><xliff:g id="id">@string/status_bar_location</xliff:g></item>
        <item><xliff:g id="id">@string/status_bar_zen</xliff:g></item>
        <item><xliff:g id="id">@string/status_bar_ethernet</xliff:g></item>
        <item><xliff:g id="id">@string/status_bar_wifi</xliff:g></item>
        <item><xliff:g id="id">@string/status_bar_hotspot</xliff:g></item>
        <item><xliff:g id="id">@string/status_bar_mobile</xliff:g></item>
        <item><xliff:g id="id">@string/status_bar_airplane</xliff:g></item>
        <item><xliff:g id="id">@string/status_bar_battery</xliff:g></item>
    </string-array>
<think>好的,我现在需要回答用户关于Android 9.0隐藏下拉状态栏电池图标的源码修改位置的问题。首先,我得回忆一下Android系统UI的相关组件结构。状态栏图标管理通常是在SystemUI模块中,具体来说,电池图标可能在StatusBar模块的某个类里。 用户提到的是下拉状态栏,也就是通知栏的快捷设置部分,这里可能属于QuickSettings或类似的布局文件。不过电池状态显示通常是在状态栏的右侧,包括电池百分比和图标。在Android源码中,电池图标的管理可能由BatteryMeterView或者BatteryController来处理。 接下来,我需要确认具体的类和方法。在AOSP的SystemUI项目中,BatteryMeterView是负责绘制电池图标的视图类,位于com.android.systemui.BatteryMeterView。而控制其显示与否的可能是在StatusBarIconController或者相关的布局文件中。 另外,隐藏图标可能需要修改SystemUI的布局文件,比如status_bar.xml或类似的布局文件,将对应的BatteryMeterView的可见性设置为GONE。或者,在代码中通过findViewById获取该视图并设置Visibility为View.GONE。 还需要考虑系统设置中的相关标志位,比如是否有配置项控制电池图标的显示,可能需要在config.xml中修改默认值。不过用户的需求是直接修改源码隐藏,所以可能需要直接注释掉相关的布局或代码逻辑。 要确保修改的是正确的版本,Android 9.0对应的分支是android-9.0.0_rXX,需要确认代码路径是否正确。例如,SystemUI的代码路径通常是packages/apps/SystemUI/src/com/android/systemui/。 可能的步骤包括: 1. 找到StatusBar的布局文件,如status_bar.xml,检查是否有BatteryMeterView。 2. 如果布局中有该视图,设置android:visibility="gone"。 3. 或者在代码中,如StatusBarPhone类中,找到初始化电池图标的部分并隐藏。 4. 另外,检查BatteryController类,看是否有控制显示的逻辑,修改相关方法。 需要注意的是,直接修改布局文件可能更直接,但不同厂商的定制ROM可能会有所不同,这里假设是原生AOSP的情况。同时,修改后需要重新编译SystemUI模块并推送生效。 总结可能的修改位置: - SystemUI的res/layout/status_bar.xml - BatteryMeterView的初始化代码 - BatteryController中的状态更新逻辑</think>要隐藏Android 9.0下拉状态栏的电池显示,需要修改SystemUI模块的源码。以下是具体步骤和关键位置: ### 核心修改位置 1. **布局文件修改** ```xml <!-- 文件路径:SystemUI/res/layout/status_bar.xml --> <com.android.systemui.BatteryMeterView android:id="@+id/battery" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="gone" /> <!-- 添加此属性隐藏电池图标 --> ``` 2. **控制逻辑修改(可选)** ```java // 文件路径:SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java protected void createStatusBarWindow() { ... mBatteryView = mStatusBarView.findViewById(R.id.battery); mBatteryView.setVisibility(View.GONE); // 强制隐藏电池视图 } ``` ### 详细操作步骤 1. **修改布局文件** - 找到`status_bar.xml`布局文件 - 给`BatteryMeterView`添加`android:visibility="gone"`属性 2. **重新编译SystemUI** ```bash make SystemUI && adb push out/target/product/{device}/system/priv-app/SystemUI/SystemUI.apk /system/priv-app/SystemUI/ ``` 3. **清除旧数据** ```bash adb shell pm clear com.android.systemui ``` ### 注意事项 1. 不同厂商ROM可能自定义了状态栏布局(如`quick_status_bar.xml`) 2. 若需保留电量百分比文字显示,需单独处理`BatteryPercentTextView` 3. Android 10+版本需修改`status_bar.xml`中的`battery_container`布局 > 完整实现需要同步修改`BatteryController`相关逻辑,防止系统异常调用隐藏的电池组件。建议通过`config.xml`添加开关控制更符合开发规范: > ```xml > <!-- SystemUI/res/values/config.xml --> > <bool name="config_showBatteryIndicator">false</bool> > ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值