国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Android11.0 導(dǎo)航欄添加圖標(biāo)截屏

這篇具有很好參考價(jià)值的文章主要介紹了Android11.0 導(dǎo)航欄添加圖標(biāo)截屏。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

需求: 導(dǎo)航欄添加截屏和電源鍵圖標(biāo),控制截屏和用于設(shè)備重啟關(guān)機(jī)功能。設(shè)置中添加延時(shí)截屏和控制截屏圖標(biāo)顯示開關(guān)。
Android11.0 導(dǎo)航欄添加圖標(biāo)截屏,系統(tǒng)修改,RK11.0,導(dǎo)航欄添加圖標(biāo),截屏

1. 導(dǎo)航欄添加圖標(biāo)

1.1 添加布局文件和圖標(biāo)icon

在layout目錄下添加nav_power.xml和screenshot.xml文件

  • frameworks/base/packages/SystemUI/res/layout/nav_power.xml
<?xml version="1.0" encoding="utf-8"?>
<com.android.systemui.statusbar.policy.KeyButtonView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:systemui="http://schemas.android.com/apk/res-auto"
    android:id="@+id/nav_power"
    android:layout_width="@dimen/navigation_key_width"
    android:layout_height="match_parent"
    android:layout_weight="0"
    android:scaleType="center"
    android:contentDescription="@string/accessibility_home"
    android:paddingStart="@dimen/navigation_key_padding"
    android:paddingEnd="@dimen/navigation_key_padding"
    />
  • frameworks/base/packages/SystemUI/res/layout/screenshot.xml
<?xml version="1.0" encoding="utf-8"?>
<com.android.systemui.statusbar.policy.KeyButtonView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:systemui="http://schemas.android.com/apk/res-auto"
    android:id="@+id/screenshot"
    android:layout_width="@dimen/navigation_key_width"
    android:layout_height="match_parent"
    android:layout_weight="0"
    systemui:keyCode="0"
    android:scaleType="center"
    android:contentDescription="@string/accessibility_home"
    android:paddingStart="@dimen/navigation_key_padding"
    android:paddingEnd="@dimen/navigation_key_padding"
    />

drawable目錄下添加ic_sysbar_power_button.xml和ic_sysbar_screenshot_button.xml

  • frameworks/base/packages/SystemUI/res/drawable/ic_sysbar_power_button.xml
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportWidth="24"
    android:viewportHeight="24">
  <path
      android:fillColor="?attr/singleToneColor"
      android:pathData="M11,2h2v10h-2zM18.37,5.64l-1.41,1.41c2.73,2.73 2.72,7.16 -0.01,9.89 -2.73,2.73 -7.17,2.73 -9.89,0.01 -2.73,-2.73 -2.74,-7.18 -0.01,-9.91l-1.41,-1.4c-3.51,3.51 -3.51,9.21 0.01,12.73 3.51,3.51 9.21,3.51 12.72,-0.01 3.51,-3.51 3.51,-9.2 0,-12.72z"/>
</vector>
  • frameworks/base/packages/SystemUI/res/drawable/ic_sysbar_screenshot_button.xml
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportWidth="24"
    android:viewportHeight="24">
  <path
      android:fillColor="?attr/singleToneColor"
      android:pathData="M17,1.01L7,1c-1.1,0 -2,0.9 -2,2v18c0,1.1 0.9,2 2,2h10c1.1,0 2,-0.9 2,-2L19,3c0,-1.1 -0.9,-1.99 -2,-1.99zM17,21L7,21v-1h10v1zM17,18L7,18L7,6h10v12zM17,4L7,4L7,3h10v1zM9.5,8.5L12,8.5L12,7L8,7v4h1.5zM12,17h4v-4h-1.5v2.5L12,15.5z"/>
</vector>
1.2 加載布局
  • frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarInflaterView.java
public static final String HOME = "home";
// add start
public static final String SCREENSHOT = "screenshot";
public static final String NAV_POWER = "nav_power";
// end

// 獲取默認(rèn)布局資源配置,關(guān)系到下一步修改圖標(biāo)顯示位置順序
protected String getDefaultLayout() {
    final int defaultResource = QuickStepContract.isGesturalMode(mNavBarMode)
            ? R.string.config_navBarLayoutHandle
            : mOverviewProxyService.shouldShowSwipeUpUI()
                    ? R.string.config_navBarLayoutQuickstep
                    : R.string.config_navBarLayout;
    return getContext().getString(defaultResource);
}

...

private View createView(String buttonSpec, ViewGroup parent, LayoutInflater inflater) {
        View v = null;
        ...
        if (HOME.equals(button)) {
            v = inflater.inflate(R.layout.home, parent, false);
        // add start
        } else if (SCREENSHOT.equals(button)) {
            v = inflater.inflate(R.layout.screenshot, parent, false);
        } else if (NAV_POWER.equals(button)) {
            v = inflater.inflate(R.layout.nav_power, parent, false);
        }
        // end
1.3 控制導(dǎo)航欄按鍵顯示位置
  • frameworks/base/packages/SystemUI/res/values-sw372dp/config.xml
<string name="config_navBarLayout" translatable="false">left[.25W],screenshot[.5WC],back[.5WC];home;recent[.5WC],nav_power[.5WC],right[.25W]</string>

這個(gè)根據(jù)設(shè)備的分辨率來修改,有可能需要修改其他目錄下的config,搜索config_navBarLayout

1.4 添加的按鍵設(shè)置圖標(biāo)
  • frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
private KeyButtonDrawable mBackIcon;
private KeyButtonDrawable mHomeDefaultIcon;
// add start
private KeyButtonDrawable mScreenshotIcon;
private KeyButtonDrawable mNavPowerIcon;
// end 

...

public NavigationBarView(Context context, AttributeSet attrs) {
    super(context, attrs);
    ...
    mButtonDispatchers.put(R.id.home, new ButtonDispatcher(R.id.home));
    // add start
    mButtonDispatchers.put(R.id.screenshot, new ButtonDispatcher(R.id.screenshot));
    mButtonDispatchers.put(R.id.nav_power, new ButtonDispatcher(R.id.nav_power));
    // end 
    ...
}


// add start
public ButtonDispatcher getScreenshotButton() {
   return mButtonDispatchers.get(R.id.screenshot);
}

public ButtonDispatcher getNavPowerButton() {
   return mButtonDispatchers.get(R.id.nav_power);
}
// end

...

private void updateIcons(Configuration oldConfig) {
	...
	if (orientationChange || densityChange || dirChange) {
	    mBackIcon = getBackDrawable();
    }
	// add start
	mScreenshotIcon = getDrawable(R.drawable.ic_sysbar_screenshot_button);
	mNavPowerIcon = getDrawable(R.drawable.ic_sysbar_power_button);
	// end
}

...

public void updateNavButtonIcons() {
	...
	getHomeButton().setImageDrawable(homeIcon);
	getBackButton().setImageDrawable(backIcon);
	// add start
	getScreenshotButton().setImageDrawable(mScreenshotIcon);
	getNavPowerButton().setImageDrawable(mNavPowerIcon);
	// end
	...
}
1.5 設(shè)置監(jiān)聽事件
  • frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java
import android.os.SystemClock; // add start

private static final long AUTODIM_TIMEOUT_MS = 2250;
// add start
private static final long SCREENSHOT_TIME_INTERVAL = 3000;
private long mLastClickScreenshotTime = 0;
// end

private void prepareNavigationBarView() {
     mNavigationBarView.reorient();
     ...
     // add start
     ButtonDispatcher screenshotButton = mNavigationBarView.getScreenshotButton();
     screenshotButton.setOnClickListener(this:: screenshotClick);
     screenshotButton.setVisibility(View.VISIBLE);
     
     ButtonDispatcher navPowerButton = mNavigationBarView.getNavPowerButton();
     navPowerButton.setOnClickListener(this:: navPowerClick);
     navPowerButton.setVisibility(View.VISIBLE);
     // end
}

...

// add start
private void navPowerClick(View v) {
     Intent intent=new Intent("android.intent.action.NAV_POWER");
     getContext().sendBroadcast(intent);
}

private void screenshotClick(View v) {
    long nowTime = SystemClock.elapsedRealtime();
    if (nowTime - mLastClickScreenshotTime < SCREENSHOT_TIME_INTERVAL) {
        return;
    }
    Intent intent=new Intent("android.intent.action.SCREENSHOT");
    getContext().sendBroadcast(intent);
    mLastClickScreenshotTime = nowTime;
}
// end
1.6 截屏和電源鍵功能實(shí)現(xiàn)
  • frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
 @Override
 public void init(Context context, IWindowManager windowManager,
     WindowManagerFuncs windowManagerFuncs) {
     ...
     // add start
     // register for nav_power click broadcasts
     filter=new IntentFilter();
     filter.addAction("android.intent.action.NAV_POWER");
     context.registerReceiver(mNavPowerReceiver, filter);
     
     // register for screenshot broadcasts
     filter=new IntentFilter();
     filter.addAction("android.intent.action.SCREENSHOT");
     context.registerReceiver(mScreenshotReceiver, filter);
     // end
     ...
}

// add start
BroadcastReceiver mScreenshotReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        mHandler.post(mScreenshotRunnable);
    }
};

BroadcastReceiver mNavPowerReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        showGlobalActionsInternal();
    }
};
// end

底下的patch中有Settings中添加延時(shí)截屏和控制圖標(biāo)顯示開關(guān)的修改
傳送門文章來源地址http://www.zghlxwxcb.cn/news/detail-551789.html

到了這里,關(guān)于Android11.0 導(dǎo)航欄添加圖標(biāo)截屏的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Android11.0 launcher修改為單層

    OS: RK3568 Android11.0 現(xiàn)在的產(chǎn)品基本都是按照手機(jī)樣式去做,所以需要把系統(tǒng)默認(rèn)的Launcher樣式,去掉抽屜改為單層顯示,也就是把所有的app添加到workspace中。 以下修改是在設(shè)備橫屏模式下進(jìn)行 。 1.添加一個(gè)宏開關(guān)控制Launcher單雙層顯示 源碼: /packages/apps/Launcher3/src/com/android/

    2024年02月08日
    瀏覽(96)
  • Android 11.0 framework關(guān)于systemUI定制之導(dǎo)航欄透明背景的功能實(shí)現(xiàn)

    Android 11.0 framework關(guān)于systemUI定制之導(dǎo)航欄透明背景的功能實(shí)現(xiàn)

    在11.0的系統(tǒng)rom產(chǎn)品定制化開發(fā)中,在對于系統(tǒng)原生SystemUI的導(dǎo)航欄背景在沉浸式導(dǎo)航欄的 情況下默認(rèn)是會隨著背景顏色的變化而改變的,在一些特定背景下導(dǎo)航欄的背景也是會改變的,所以由于產(chǎn)品開發(fā)需要 要求需要設(shè)置導(dǎo)航欄背景為透明的,所以就需要在Activity創(chuàng)建的時(shí)候

    2024年02月04日
    瀏覽(94)
  • Android 11.0 系統(tǒng)開機(jī)自啟動第三方app

    ? 在11.0的系統(tǒng)rom定制化開發(fā)中,由于有些第三方app,需要在接收到開機(jī)廣播后,啟動app,但是在10.0以后第三方app就接收不到開機(jī)廣播了 只有系統(tǒng)app才可以接收到開機(jī)廣播了,所以在app內(nèi)通過接收開機(jī)廣播自啟動就沒法實(shí)現(xiàn)了 這就需要在系統(tǒng)中添加監(jiān)聽開機(jī)完成廣播的功能,

    2024年02月16日
    瀏覽(299)
  • Android11.0 生成系統(tǒng)簽名.jks文件并對Apk進(jìn)行簽名

    V2簽名 對應(yīng)用手動進(jìn)行系統(tǒng)簽名,需要platform.pk8,platform.x509.pem,signapk.jar這三個(gè)文件,應(yīng)用的AndroidManifest.xml中需要添加 android:sharedUserId=“android.uid.system” ,然后輸入以下命令就可得到簽名后的apk文件: 如果你的應(yīng)用 targetSdkVersion=30 ,在7.0以上的設(shè)備上安裝不成功,會報(bào)以

    2024年02月07日
    瀏覽(93)
  • Android11.0系統(tǒng)中實(shí)現(xiàn)靜默安裝并啟動App以及靜默卸載

    本文描述Android11中通過修改系統(tǒng)PackageInstaller應(yīng)用支持靜默安裝App,并啟動安裝的App。 PackageInstaller是系統(tǒng)中專門負(fù)責(zé)app安裝的App,靜默安裝邏輯添加到此應(yīng)用中,應(yīng)用所在路徑 /frameworks/base/packages/PackageInstaller/src/com/android/packageinstaller/ 添加SilenceInstallManager,路徑為 /frameworks

    2024年02月03日
    瀏覽(99)
  • Android 11.0 系統(tǒng)限制上網(wǎng)系統(tǒng)之iptables用IOemNetd實(shí)現(xiàn)創(chuàng)建子鏈功能的實(shí)現(xiàn)

    在11.0的系統(tǒng)rom定制化開發(fā)中,對于限制系統(tǒng)上網(wǎng)功能中,需要在system中netd網(wǎng)絡(luò)這塊的產(chǎn)品開發(fā)中,會要求設(shè)置屏蔽ip地址之內(nèi)的功能, liunx中iptables命令也是比較重要的,接下來就來在IOemNetd這塊實(shí)現(xiàn)創(chuàng)建子鏈的相關(guān)功能 在android原生系統(tǒng)中,iptables是在網(wǎng)絡(luò)過濾包模塊非常重

    2024年02月13日
    瀏覽(90)
  • Android 11.0 系統(tǒng)限制上網(wǎng)系統(tǒng)之iptables用IOemNetd實(shí)現(xiàn)刪除子鏈功能的實(shí)現(xiàn)

    在11.0的系統(tǒng)rom定制化開發(fā)中,對于限制系統(tǒng)上網(wǎng)功能中,在system中netd網(wǎng)絡(luò)這塊的產(chǎn)品開發(fā)中,會要求設(shè)置屏蔽ip地址之內(nèi)的功能, liunx中iptables命令也是比較重要的,接下來就來在IOemNetd這塊實(shí)現(xiàn)刪除創(chuàng)建子鏈的相關(guān)功能 在android原生系統(tǒng)中,iptables是在網(wǎng)絡(luò)過濾包模塊非常重

    2024年02月16日
    瀏覽(92)
  • Android11.0 系統(tǒng)限制上網(wǎng)系統(tǒng)之iptables用IOemNetd實(shí)現(xiàn)app上網(wǎng)黑名單的實(shí)現(xiàn)

    在11.0的系統(tǒng)rom定制化開發(fā)中,對于系統(tǒng)限制網(wǎng)絡(luò)的使用,在system中netd網(wǎng)絡(luò)這塊的產(chǎn)品需要中,會要求設(shè)置屏蔽某個(gè)app上網(wǎng)的功能, liunx中iptables命令也是比較重要的,接下來就來在IOemNetd這塊實(shí)現(xiàn)app上網(wǎng)黑名單的的相關(guān)功能,就是在 系統(tǒng)中只能不允許某個(gè)app上網(wǎng),就是除了這

    2024年02月15日
    瀏覽(92)
  • Android 11.0 系統(tǒng)限制上網(wǎng)系列之iptables用IOemNetd實(shí)現(xiàn)app某個(gè)時(shí)間段禁止上網(wǎng)的功能實(shí)現(xiàn)

    在11.0的系統(tǒng)rom定制化開發(fā)中,對于系統(tǒng)限制網(wǎng)絡(luò)的使用,在system中netd網(wǎng)絡(luò)這塊的產(chǎn)品需要中,會要求設(shè)置app某個(gè)時(shí)間段禁止上網(wǎng)的功能, liunx中iptables命令也是比較重要的,接下來就來在IOemNetd這塊實(shí)現(xiàn)app某個(gè)時(shí)間段禁止上網(wǎng)的的相關(guān)功能,就是在 系統(tǒng)中只能允許某個(gè)app某個(gè)

    2024年02月14日
    瀏覽(95)
  • Android13系統(tǒng)導(dǎo)航欄添加隱藏導(dǎo)航欄功能按鈕

    Android13系統(tǒng)導(dǎo)航欄添加隱藏導(dǎo)航欄功能按鈕

    最近有個(gè)項(xiàng)目,客戶要求在底部導(dǎo)航欄中添加一個(gè)可以隱藏整個(gè)導(dǎo)航欄的功能按鈕,效果如下圖: 具體方法如下: 1. 在frameworks/base做如下修改: 2. 上面修改中有一行代碼android:src=\\\"@drawable/ic_sysbar_hide\\\"引用了一個(gè)ic_sysbar_hide.xml文件,該文件內(nèi)容如下:其實(shí)就是那個(gè)隱藏按鈕的

    2024年04月23日
    瀏覽(99)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包