欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

目錄

Android 13 SystemUI,底部導(dǎo)航欄新增功能按鍵、導(dǎo)航欄側(cè)邊(左側(cè),右側(cè),頂側(cè))顯示。

寫在前面: SystemUI 是Android原生系統(tǒng)極重要的系統(tǒng)APP,本文介紹如何根據(jù)需要在原生三個按鍵BACK HOME RECENT的基礎(chǔ)上,新增新的自定義按鍵。SystemUI總共分為三個版本:Phone手機、Tablet平板、TV版本。Android13中,Phone、Tablet是一樣的。本教程適用SystemUI版本:Android13——>Phone 、Tablet版SystemUI。 注:SystemUI的啟動流程,本篇文章不介紹。

一、底部導(dǎo)航欄新增功能按鍵。

??首先介紹一下Phone、Tablet版的SystemUI的啟動路線,看下圖: ??啟動流程中的CentralSurfaces,是我們修改的切入點。打開源碼找到CentralSurfacesImpl.java文件,下面我沿著CentralSurfacesImpl.java簡單描述一下修改思路,然后貼出完整補丁。

1、frameworks\base\packages\SystemUI\src\com\android\systemui\statusbar\phone\CentralSurfacesImpl.java

@Override

public void start() {

. . . . . .

. . . . . .

. . . . . .

createAndAddWindows(result);//這里為入口

. . . . . .

. . . . . .

. . . . . .

}

@Override

public void createAndAddWindows(@Nullable RegisterStatusBarResult result) {

makeStatusBarView(result);//從這里進去創(chuàng)建狀態(tài)欄、導(dǎo)航欄

mNotificationShadeWindowController.attach();

mStatusBarWindowController.attach();

}

// ================================================================================

// Constructing the view

// ================================================================================

protected void makeStatusBarView(@Nullable RegisterStatusBarResult result) {

. . . . . .

. . . . . .

. . . . . .

createNavigationBar(result);//創(chuàng)建導(dǎo)航欄入口

. . . . . .

. . . . . .

. . . . . .

}

protected void createNavigationBar(@Nullable RegisterStatusBarResult result) {

mNavigationBarController.createNavigationBars(true /* includeDefaultDisplay */, result);

}

2、frameworks\base\packages\SystemUI\src\com\android\systemui\navigationbar\NavigationBarController.java

public void createNavigationBars(final boolean includeDefaultDisplay,

RegisterStatusBarResult result) {

updateAccessibilityButtonModeIfNeeded();

// Don't need to create nav bar on the default display if we initialize TaskBar.

final boolean shouldCreateDefaultNavbar = includeDefaultDisplay

&& !initializeTaskbarIfNecessary();

Display[] displays = mDisplayManager.getDisplays();

for (Display display : displays) {

if (shouldCreateDefaultNavbar || display.getDisplayId() != DEFAULT_DISPLAY) {

createNavigationBar(display, null /* savedState */, result);

}

}

}

/**

* Adds a navigation bar on default display or an external display if the display supports

* system decorations.

*

* @param display the display to add navigation bar on.

*/

@VisibleForTesting

void createNavigationBar(Display display, Bundle savedState, RegisterStatusBarResult result) {

. . . . . .

. . . . . .

. . . . . .

//從這里分為兩個部分

NavigationBar navBar = component.getNavigationBar();//導(dǎo)航欄實例化

navBar.init();//將導(dǎo)航欄添加到屏幕上

. . . . . .

. . . . . .

. . . . . .

}

注:導(dǎo)航欄實例化會去加載導(dǎo)航欄對應(yīng)的XML,里面默認只有Back|Home|Recent,想要添加新的功能鍵,第一步就是去修改這個XML;navBar.init()中則是為按鍵添加圖標、綁定點擊事件,并最終通過windowManager的addView方法將導(dǎo)航添加到桌面上顯示。

完整補丁:

1、xml中新增按鈕

??以我的項目分辨率 = 1920x1080、dpi = 320、density = 2來說,對應(yīng)修改的xml為——>res\values-sw372dp\config.xml 我這里給出的例子,除了原生Back|Home|Recent之外,新增了其它四個按鍵。

diff --git a/frameworks/base/packages/SystemUI/res/values-sw372dp/config.xml b/frameworks/base/packages/SystemUI/res/values-sw372dp/config.xml

index 07b797a324..3b936766c5 100644

--- a/frameworks/base/packages/SystemUI/res/values-sw372dp/config.xml

+++ b/frameworks/base/packages/SystemUI/res/values-sw372dp/config.xml

@@ -21,5 +21,5 @@

for different hardware and product builds. -->

- left[.25W],back[.5WC];home;recent[.5WC],right[.25W]

+ back;home;recent;volume;comments;whiteboard;collapse

2、NavigationBarInflaterView.java

??inflateLayout函數(shù)新增inflateButtons選項、createView函數(shù)新增對新按鈕描述String的過濾;這個類的功能主要是從上述的xml文件中把所有按鍵加載進來,并進行過濾操作。

diff --git a/frameworks/base/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarInflaterView.java b/frameworks/base/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarInflaterView.java

index 59bb2278ed..5724e09a00 100644

--- a/frameworks/base/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarInflaterView.java

+++ b/frameworks/base/packages/SystemUI/src/com/android/systemui/navigationbar/NavigationBarInflaterView.java

@@ -60,6 +60,12 @@ public class NavigationBarInflaterView extends FrameLayout

public static final String BACK = "back";

public static final String HOME = "home";

public static final String RECENT = "recent";

+ //xuhao add

+ public static final String VOLUME = "volume";

+ public static final String COMMENTS = "comments";

+ public static final String WHITEBOARD = "whiteboard";

+ public static final String COLLAPSE = "collapse";

+ //

public static final String NAVSPACE = "space";

public static final String CLIPBOARD = "clipboard";

public static final String HOME_HANDLE = "home_handle";

@@ -96,7 +102,7 @@ public class NavigationBarInflaterView extends FrameLayout

private View mLastPortrait;

private View mLastLandscape;

- private boolean mIsVertical;

+ private boolean mIsVertical ;

private boolean mAlternativeOrder;

private OverviewProxyService mOverviewProxyService;

@@ -177,6 +183,7 @@ public class NavigationBarInflaterView extends FrameLayout

void updateButtonDispatchersCurrentView() {

if (mButtonDispatchers != null) {

View view = mIsVertical ? mVertical : mHorizontal;

+ Log.d(TAG,"mIsVertical"+mIsVertical);

for (int i = 0; i < mButtonDispatchers.size(); i++) {

final ButtonDispatcher dispatcher = mButtonDispatchers.valueAt(i);

dispatcher.setCurrentView(view);

@@ -236,34 +243,64 @@ public class NavigationBarInflaterView extends FrameLayout

if (newLayout == null) {

newLayout = getDefaultLayout();

}

- String[] sets = newLayout.split(GRAVITY_SEPARATOR, 3);

- if (sets.length != 3) {

+

+ //xuhao add

+ String[] sets = newLayout.split(GRAVITY_SEPARATOR, 7);

+ if (sets.length != 7) {

Log.d(TAG, "Invalid layout.");

newLayout =

推薦文章

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/18516107.html

發(fā)布評論

您暫未設(shè)置收款碼

請在主題配置——文章設(shè)置里上傳

掃描二維碼手機訪問

文章目錄