Android實(shí)現(xiàn)隱藏手機(jī)底部虛擬按鍵
現(xiàn)在的手機(jī)比較流行底部帶虛擬按鍵,比如華為、nexus,一般情況下對(duì)開(kāi)發(fā)一個(gè)APP沒(méi)啥影響,但是不一般情況下就會(huì)有影響的,比如全屏錄像功能,
用簡(jiǎn)單的方法直接獲取camera支持的手機(jī)屏幕分辨率然后用SurfaceView全屏渲染出來(lái),這時(shí)由于底部虛擬按鍵占用了一定的高度的屏幕空間,這時(shí)圖像會(huì)被壓縮,
特別是拍頭像時(shí)會(huì)很明顯,如圖:
接下來(lái)加上幾個(gè)方法就OK 了,代碼如下
/** * 隱藏虛擬按鍵,并且全屏 */ protected void hideBottomUIMenu(){ //隱藏虛擬按鍵,并且全屏 if (Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) { // lower api View v = this.getWindow().getDecorView(); v.setSystemUiVisibility(View.GONE); } else if (Build.VERSION.SDK_INT >= 19) { //for new api versions. View decorView = getWindow().getDecorView(); int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar // | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar | View.SYSTEM_UI_FLAG_IMMERSIVE; decorView.setSystemUiVisibility(uiOptions); getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); } }
檢查是否存在虛擬按鍵欄
/** * 檢查是否存在虛擬按鍵欄 * @param context * @return */ public static boolean hasNavBar(Context context) { Resources res = context.getResources(); int resourceId = res.getIdentifier("config_showNavigationBar", "bool", "android"); if (resourceId != 0) { boolean hasNav = res.getBoolean(resourceId); // check override flag String sNavBarOverride = getNavBarOverride(); if ("1".equals(sNavBarOverride)) { hasNav = false; } else if ("0".equals(sNavBarOverride)) { hasNav = true; } return hasNav; } else { // fallback return !ViewConfiguration.get(context).hasPermanentMenuKey(); } } /** * 判斷虛擬按鍵欄是否重寫(xiě) * @return */ private static String getNavBarOverride() { String sNavBarOverride = null; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { try { Class c = Class.forName("android.os.SystemProperties"); Method m = c.getDeclaredMethod("get", String.class); m.setAccessible(true); sNavBarOverride = (String) m.invoke(null, "qemu.hw.mainkeys"); } catch (Throwable e) { } } return sNavBarOverride; }
hideBottomUIMenu() 在onCreate()里面調(diào)用就可以了,之后的效果,底部虛擬按鍵也成為了SurfaceView的一部分,不僅僅只是透明了哦,如圖:
當(dāng)然以上代碼不一定只能用于錄像,相關(guān)功能需求都可以使用。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android實(shí)現(xiàn)狀態(tài)欄和虛擬按鍵背景顏色的變化實(shí)例代碼詳解
- Android隱藏手機(jī)底部虛擬按鍵的方法
- Android實(shí)現(xiàn)手機(jī)游戲隱藏虛擬按鍵
- Android 虛擬按鍵適配動(dòng)態(tài)調(diào)整布局的方法
- Android適配底部虛擬按鍵的方法詳解
- android底層去掉虛擬按鍵的實(shí)例講解
- Android dialog 去除虛擬按鍵的解決方法
- 解決Android 虛擬按鍵遮住了頁(yè)面內(nèi)容的問(wèn)題
- Android 虛擬按鍵與沉浸式的適配方法
- Android如何解決虛擬按鍵欄遮擋問(wèn)題
相關(guān)文章
Android輔助功能實(shí)現(xiàn)自動(dòng)搶紅包(附源碼)
本篇文章主要介紹了Android輔助功能實(shí)現(xiàn)自動(dòng)搶紅包(附源碼),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-11-11Android基于高德地圖完全自定義Marker的實(shí)現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于Android基于高德地圖完全自定義Marker的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-07-07Android?Material組件庫(kù)日期選擇和時(shí)間選擇器的使用方法
這篇文章主要介紹了Android?Material組件庫(kù)(日期選擇和時(shí)間選擇器)基本使用,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-11-11Android實(shí)現(xiàn)短視頻畫(huà)心效果
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)短視頻畫(huà)心效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-05-05Android鍵盤(pán)輸入語(yǔ)言設(shè)置默認(rèn)打開(kāi)myanmar緬甸語(yǔ)的步驟
如何實(shí)現(xiàn)Android鍵盤(pán)輸入語(yǔ)言默認(rèn)打開(kāi)為myanmar緬甸語(yǔ),如果要設(shè)置某種語(yǔ)言在輸入法默認(rèn)打開(kāi)可按一下步驟添加文件,我這里已經(jīng)驗(yàn)證時(shí)OK的2013-06-06Android用PopupWindow實(shí)現(xiàn)新浪微博的分組信息實(shí)例
PopupWindow可以實(shí)現(xiàn)浮層效果,而且可以自定義顯示位置,本篇文章主要介紹Android用PopupWindow實(shí)現(xiàn)新浪微博的分組信息,有需要的可以了解一下。2016-11-11Android開(kāi)發(fā)實(shí)現(xiàn)的獲取sdcard大小及內(nèi)存大小工具類(lèi)
這篇文章主要介紹了Android開(kāi)發(fā)實(shí)現(xiàn)的獲取sdcard大小及內(nèi)存大小工具類(lèi),涉及Android針對(duì)手機(jī)硬件SD卡及內(nèi)存相關(guān)操作技巧,需要的朋友可以參考下2017-11-11Android實(shí)現(xiàn)夜間模式切換功能實(shí)現(xiàn)代碼
現(xiàn)在很多App都有夜間模式,特別是閱讀類(lèi)的App,夜間模式現(xiàn)在已經(jīng)是閱讀類(lèi)App的標(biāo)配,本篇文章主要介紹了Android實(shí)現(xiàn)夜間模式功能實(shí)現(xiàn)代碼,有興趣的可以了解一下。2017-03-03