Android導(dǎo)航欄功能項的顯示與屏蔽介紹
?Android 的導(dǎo)航欄有諸多功能,例入 截屏,音量加,音量減,最近任務(wù),菜單.返回,主頁面,輸入法開關(guān)?。?/strong>
代碼源路徑:frameworks\base\packages\SystemUI\src\com\android\systemui\statusbar\phone\NavigationBarView.java
public ButtonDispatcher getScreenshotButton() {
return mButtonDispatchers.get(R.id.screenshot);
}
public ButtonDispatcher getVolumeAddButton() {
return mButtonDispatchers.get(R.id.volume_add);
}
public ButtonDispatcher getVolumeSubButton() {
return mButtonDispatchers.get(R.id.volume_sub);
}
public ButtonDispatcher getRecentsButton() {
return mButtonDispatchers.get(R.id.recent_apps);
}
public ButtonDispatcher getMenuButton() {
return mButtonDispatchers.get(R.id.menu);
}
public ButtonDispatcher getBackButton() {
return mButtonDispatchers.get(R.id.back);
}
public ButtonDispatcher getHomeButton() {
return mButtonDispatchers.get(R.id.home);
}
public ButtonDispatcher getImeSwitchButton() {
return mButtonDispatchers.get(R.id.ime_switcher);
}
public ButtonDispatcher getAccessibilityButton() {
return mButtonDispatchers.get(R.id.accessibility_button);
}
Android 即在此類中完成對 Button圖標 的選擇 .?
若需要展示/隱藏對應(yīng)的 功能選項時,需要在此處修改:
private void prepareNavigationBarView() {
mNavigationBarView.reorient();
ButtonDispatcher recentsButton = mNavigationBarView.getRecentsButton();
recentsButton.setOnClickListener(this::onRecentsClick);
recentsButton.setOnTouchListener(this::onRecentsTouch);
recentsButton.setLongClickable(true);
recentsButton.setOnLongClickListener(this::onLongPressBackRecents);
ButtonDispatcher backButton = mNavigationBarView.getBackButton();
backButton.setLongClickable(true);
backButton.setOnLongClickListener(this::onLongPressBackRecents);
ButtonDispatcher homeButton = mNavigationBarView.getHomeButton();
homeButton.setOnTouchListener(this::onHomeTouch);
homeButton.setOnLongClickListener(this::onHomeLongClick);
ButtonDispatcher accessibilityButton = mNavigationBarView.getAccessibilityButton();
accessibilityButton.setOnClickListener(this::onAccessibilityClick);
accessibilityButton.setOnLongClickListener(this::onAccessibilityLongClick);
updateAccessibilityServicesState(mAccessibilityManager);
ButtonDispatcher screenshotButton = mNavigationBarView.getScreenshotButton();
screenshotButton.setOnClickListener(this:: screenshotClick);
screenshotButton.setOnTouchListener(this:: screenshotTouch);
boolean isShow=Settings.System.getInt(getContext().getContentResolver(), Settings.System.SCREENSHOT_BUTTON_SHOW, 1) == 1;
if(isShow){
screenshotButton.setVisibility(View.VISIBLE);
}else{
screenshotButton.setVisibility(View.GONE);
}
ButtonDispatcher volumeAddButton=mNavigationBarView.getVolumeAddButton();
ButtonDispatcher volumeSubButton=mNavigationBarView.getVolumeSubButton();
boolean isShowVolumeButton="true".equals(SystemProperties.get("ro.rk.systembar.voiceicon","true"));
if(isShowVolumeButton){
volumeAddButton.setVisibility(View.VISIBLE);
volumeSubButton.setVisibility(View.VISIBLE);
}else{
volumeAddButton.setVisibility(View.GONE);
volumeSubButton.setVisibility(View.GONE);
}
if (getContext().getResources().getConfiguration().smallestScreenWidthDp < 400) {
volumeAddButton.setVisibility(View.GONE);
volumeSubButton.setVisibility(View.GONE);
}
}
可以將對應(yīng)的Button 設(shè)置 setVisibility(View.GONE / View.INVISIBLE / View.VISIBLE);?
?當(dāng)加上setVisibility時,UI界面還沒顯示時,需要注意config.xml中是否有寫進去需要的Button .?
frameworks\base\packages\SystemUI\res\values\config.xml
<string name="config_navBarLayout" translatable="false">left;volume_sub,back,home,recent,volume_add;right</string>
需要注意的是,config中配置的順序 即為 UI的顯示順序 .
提一嘴,如果需要用到屏蔽狀態(tài)欄以及任務(wù)欄,可以將如下status_bar_height 的高度設(shè)為0.
?frameworks\base\core\res\res\values\dimens.xml
<!-- Height of the status bar -->
<dimen name="status_bar_height">0dp</dimen>
到此這篇關(guān)于Android導(dǎo)航欄功能項的顯示與屏蔽介紹的文章就介紹到這了,更多相關(guān)Android導(dǎo)航欄內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android 使用Retrofit 以純二進制文件流上傳文件的操作代碼
文章介紹了如何在Android項目中使用Retrofit通過純二進制文件流上傳文件,包括單個文件流上傳和大文件分段上傳的方法,并詳細描述了需求協(xié)議、接口定義、RequestInterceptor的使用以及相關(guān)庫的調(diào)用,感興趣的朋友跟隨小編一起看看吧2024-11-11
flutter 實現(xiàn)點擊下拉欄微信右上角彈出窗功能
這篇文章主要介紹了flutter 實現(xiàn)彈出窗點擊下拉欄微信右上角彈出窗功能,這段代碼使用的是PopupRoute這個路由類進行實現(xiàn) 的,分步驟通過實例代碼講解的非常詳細,需要的朋友可以參考下2021-05-05
Android AndBase框架使用封裝好的函數(shù)完成Http請求(三)
這篇文章主要介紹了Android AndBase框架使用封裝好的函數(shù)完成Http請求的相關(guān)資料,感興趣的小伙伴們可以參考一下2016-03-03
Android即時通訊設(shè)計(騰訊IM接入和WebSocket接入)
本文主要介紹了Android即時通訊設(shè)計(騰訊IM接入和WebSocket接入),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04
Android中ViewPager的PagerTabStrip與PagerTitleStrip用法實例
這篇文章主要介紹了Android中ViewPager的PagerTabStrip與PagerTitleStrip用法實例,這兩個子控件一般被用作添加標題,在實際效果上并不是那么好控制,使用的時候需要謹慎,需要的朋友可以參考下2016-06-06
通知監(jiān)控NotificationListenerService onNotificationPosted重復(fù)回
這篇文章主要為大家介紹了通知監(jiān)控NotificationListenerService onNotificationPosted重復(fù)回調(diào)問題解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-02-02

