张裕 发表于 2024-6-14 23:07:33

Android13定制状态栏导航栏

一、状态栏的隐藏与体现
SystemUI模块修改文件如下:
frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java
https://img-blog.csdnimg.cn/direct/8a9f5b0825404ef08fdeff078b9d21c0.png
https://img-blog.csdnimg.cn/direct/5d25ed26c03240f288a67edc35294926.png
https://img-blog.csdnimg.cn/direct/2710ee89c2b64bbc883a6ecd403c2b80.pnghttps://img-blog.csdnimg.cn/direct/016a7a0c05754c49ad5e023123795622.png
https://img-blog.csdnimg.cn/direct/4b9c2dbdea2a4ef38e4c2453f79566f2.png
https://img-blog.csdnimg.cn/direct/a7f191767f954748b2dcdd180f0a8bbc.png
https://img-blog.csdnimg.cn/direct/1ee8f6c5367b464e8da40e760e44a151.png
frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/window/StatusBarWindowController.java
https://img-blog.csdnimg.cn/direct/cf3ccd0cfb8746b1a47dcee45ae2c4ac.png
二、导航栏的隐藏与体现
packages/apps/Launcher3/quickstep/src/com/android/launcher3/taskbar/TaskbarManager.java
https://img-blog.csdnimg.cn/direct/89bbfc1232da47e2a21f40a67847e9f3.png
https://img-blog.csdnimg.cn/direct/8d16617fb34748e8a2048f2b24e249f0.png
https://img-blog.csdnimg.cn/direct/14c961ede5ee45019e8f7e4ac057863f.png
https://img-blog.csdnimg.cn/direct/71bd57249a7d40e68fb094d318f60f89.png
https://img-blog.csdnimg.cn/direct/973f4e1ec9c3471e82707eb13e008ea0.png
https://img-blog.csdnimg.cn/direct/d610a41bb91d4a449335bb099614b5d7.png
packages/apps/Launcher3/quickstep/src/com/android/quickstep/TouchInteractionService.java
https://img-blog.csdnimg.cn/direct/29e0b4d8efb0406e86d6b5ef02888bda.png
https://img-blog.csdnimg.cn/direct/54a2c1a896a24799a54da57f2aeab664.png
https://img-blog.csdnimg.cn/direct/ba8873d4801046e2949040888b0f6965.png
三、Settings模块修改添加开关:
packages/apps/Settings/res/xml/display_settings.xml
https://img-blog.csdnimg.cn/direct/bc74efa67f8145c584b3373cc80c0b0e.png
packages/apps/Settings/src/com/android/settings/display/status_navi_bar/NaviBarPreferenceController.java
package com.android.settings.display.status_navi_bar;

import android.content.Context;
import android.content.Intent;
import android.os.SystemProperties;
import android.preference.Preference;
import android.util.Log;

import com.android.settings.core.BasePreferenceController;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.core.TogglePreferenceController;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnPause;
import com.android.settingslib.core.lifecycle.events.OnResume;

public class NaviBarPreferenceController extends TogglePreferenceController implements PreferenceControllerMixin, Preference.OnPreferenceChangeListener, LifecycleObserver, OnResume, OnPause {

    private static final String TAG = "NaviBarPreferenceController";

    private static final String SYS_PROPERTY_NAVIGATION_BAR = "persist.sys.navigationbar.enable";
    private static final String ACTION_HIDE_NAVIGATION_BAR = "com.systemui.navigationbar.hide";
    private static final String ACTION_SHOW_NAVIGATION_BAR = "com.systemui.navigationbar.show";
    private Context mContext;
    public NaviBarPreferenceController(Context context, String preferenceKey) {
      super(context, preferenceKey);
      mContext = context;
    }

    @Override
    public int getAvailabilityStatus() {
      return BasePreferenceController.AVAILABLE;
    }

    @Override
    public boolean isChecked() {
      return !SystemProperties.getBoolean(SYS_PROPERTY_NAVIGATION_BAR, false);
    }

    @Override
    public boolean setChecked(boolean isChecked) {
      Log.d(TAG, "setChecked: " + isChecked);
      Intent intent = isChecked ? new Intent(ACTION_HIDE_NAVIGATION_BAR) : new Intent(ACTION_SHOW_NAVIGATION_BAR);
      mContext.sendBroadcast(intent);
      return true;
    }

    @Override
    public int getSliceHighlightMenuRes() {
      return NO_RES;
    }

    @Override
    public boolean onPreferenceChange(Preference preference, Object newValue) {
      Log.d(TAG, "onPreferenceChange: "+newValue);
      return true;
    }

    @Override
    public void onPause() {
      Log.d(TAG, "onPause: ");
    }

    @Override
    public void onResume() {
      Log.d(TAG, "onResume: ");
    }
}
packages/apps/Settings/src/com/android/settings/display/status_navi_bar/StatusBarPreferenceController.java
package com.android.settings.display.status_navi_bar;

import android.content.Context;
import android.content.Intent;
import android.os.SystemProperties;
import android.preference.Preference;
import android.util.Log;

import com.android.settings.core.BasePreferenceController;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.core.TogglePreferenceController;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnPause;
import com.android.settingslib.core.lifecycle.events.OnResume;

public class StatusBarPreferenceController extends TogglePreferenceController implements PreferenceControllerMixin, Preference.OnPreferenceChangeListener, LifecycleObserver, OnResume, OnPause {

    private static final String TAG = "StatusBarPreferenceController";

    private static final String SYS_PROPERTY_STATUS_BAR = "persist.sys.statusbar.enable";
    private static final String ACTION_HIDE_STATUS_BAR = "com.systemui.statusbar.hide";
    private static final String ACTION_SHOW_STATUS_BAR = "com.systemui.statusbar.show";
    private Context mContext;

    public StatusBarPreferenceController(Context context, String preferenceKey) {
      super(context, preferenceKey);
      mContext = context;
    }

    @Override
    public int getAvailabilityStatus() {
      return BasePreferenceController.AVAILABLE;
    }

    @Override
    public boolean isChecked() {
      return !SystemProperties.getBoolean(SYS_PROPERTY_STATUS_BAR, false);
    }

    @Override
    public boolean setChecked(boolean isChecked) {
      Log.d(TAG, "setChecked: " + isChecked);
      Intent intent = isChecked ? new Intent(ACTION_HIDE_STATUS_BAR) : new Intent(ACTION_SHOW_STATUS_BAR);
      mContext.sendBroadcast(intent);
      return true;
    }

    @Override
    public int getSliceHighlightMenuRes() {
      return NO_RES;
    }

    @Override
    public boolean onPreferenceChange(Preference preference, Object newValue) {
      Log.d(TAG, "onPreferenceChange: "+newValue);
      return true;
    }

    @Override
    public void onPause() {
      Log.d(TAG, "onPause: ");
    }

    @Override
    public void onResume() {
      Log.d(TAG, "onResume: ");
    }
}
至此,完成了状态栏和导航栏的隐藏与体现

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Android13定制状态栏导航栏