如何適配Android底部虛擬按鍵

前言

本文章只做一個(gè)記錄,一個(gè)備忘,也為了更好的幫助他人纪他,文章參考地址:Android適配底部虛擬按鍵的方法

問題說明

項(xiàng)目進(jìn)行中需要透明漸變的狀態(tài)欄,全屏顯示晾匠,當(dāng)然透明漸變好弄止喷,方法有很多,但是如果有虛擬按鍵的就有出一些問題混聊,底部按鍵總是會(huì)有問題,設(shè)置底部按鍵顏色吧乾巧,但是又不好看句喜,一直隱藏用戶體驗(yàn)肯定不好。那怎么辦呢沟于,我們往下看咳胃。

  • 每次進(jìn)入界面時(shí)虛擬按鍵自動(dòng)隱藏
  • 手動(dòng)滑出虛擬按鍵,當(dāng)不操作屏幕時(shí)定時(shí)自動(dòng)隱藏
  • 當(dāng)滑出狀態(tài)欄時(shí)虛擬按鍵會(huì)跟著出來旷太,也要處理讓其和狀態(tài)欄在不操作時(shí)自動(dòng)隱藏

這樣的效果才是好的

實(shí)現(xiàn)

代碼實(shí)現(xiàn)

public class MyActivity extends AppCompatActivity {

private View decorView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_test);
    //獲取頂層視圖
    decorView = getWindow().getDecorView();
}

@Override
protected void onStart() {
    //調(diào)用配置
    init();
    super.onStart();
}

private void init(){
    int flag = 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
          //  | View.SYSTEM_UI_FLAG_FULLSCREEN // 不隱藏狀態(tài)欄展懈,因?yàn)殡[藏了比如時(shí)間電量等信息也會(huì)隱藏
            | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
    //判斷當(dāng)前版本在4.0以上并且存在虛擬按鍵,否則不做操作
    if (Build.VERSION.SDK_INT < 19 || !checkDeviceHasNavigationBar()) {
    //一定要判斷是否存在按鍵供璧,否則在沒有按鍵的手機(jī)調(diào)用會(huì)影響別的功能存崖。如之前沒有考慮到,導(dǎo)致圖傳全屏變成小屏顯示睡毒。
        return;
    } else {
        //自定義工具来惧,設(shè)置狀態(tài)欄顏色是透明
          ViewUtil.setWindowStatusBarColor(this,R.color.transparent);
        // 獲取屬性
        decorView.setSystemUiVisibility(flag);
    }
}

/**
 * 判斷是否存在虛擬按鍵
 * @return
 */
public boolean checkDeviceHasNavigationBar() {
    boolean hasNavigationBar = false;
    Resources rs = getResources();
    int id = rs.getIdentifier("config_showNavigationBar", "bool", "android");
    if (id > 0) {
        hasNavigationBar = rs.getBoolean(id);
    }
    try {
        Class<?> systemPropertiesClass = Class.forName("android.os.SystemProperties");
        Method m = systemPropertiesClass.getMethod("get", String.class);
        String navBarOverride = (String) m.invoke(systemPropertiesClass, "qemu.hw.mainkeys");
        if ("1".equals(navBarOverride)) {
            hasNavigationBar = false;
        } else if ("0".equals(navBarOverride)) {
            hasNavigationBar = true;
        }
    } catch (Exception e) {

    }
    return hasNavigationBar;
}

@Override
public boolean onTouch(View v, MotionEvent event) {
    return false;
}

注:有些時(shí)候要手動(dòng)去調(diào)用上述代碼中init()配置方法隱藏按鍵。如彈出dialog時(shí)虛擬按鍵會(huì)出來演顾,此時(shí)要手動(dòng)調(diào)用隱藏供搀,還有彈出鍵盤等等。

只是記錄钠至,以后遇到這種問題可以參考

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末葛虐,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子棉钧,更是在濱河造成了極大的恐慌屿脐,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,332評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異摄悯,居然都是意外死亡赞季,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,508評論 3 385
  • 文/潘曉璐 我一進(jìn)店門奢驯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來申钩,“玉大人,你說我怎么就攤上這事瘪阁∪銮玻” “怎么了?”我有些...
    開封第一講書人閱讀 157,812評論 0 348
  • 文/不壞的土叔 我叫張陵管跺,是天一觀的道長义黎。 經(jīng)常有香客問我,道長豁跑,這世上最難降的妖魔是什么廉涕? 我笑而不...
    開封第一講書人閱讀 56,607評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮艇拍,結(jié)果婚禮上狐蜕,老公的妹妹穿的比我還像新娘。我一直安慰自己卸夕,他們只是感情好层释,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,728評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著快集,像睡著了一般贡羔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上个初,一...
    開封第一講書人閱讀 49,919評論 1 290
  • 那天乖寒,我揣著相機(jī)與錄音,去河邊找鬼勃黍。 笑死宵统,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的覆获。 我是一名探鬼主播马澈,決...
    沈念sama閱讀 39,071評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼弄息!你這毒婦竟也來了痊班?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,802評論 0 268
  • 序言:老撾萬榮一對情侶失蹤摹量,失蹤者是張志新(化名)和其女友劉穎涤伐,沒想到半個(gè)月后馒胆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,256評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡凝果,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,576評論 2 327
  • 正文 我和宋清朗相戀三年祝迂,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片器净。...
    茶點(diǎn)故事閱讀 38,712評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡型雳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出山害,到底是詐尸還是另有隱情纠俭,我是刑警寧澤,帶...
    沈念sama閱讀 34,389評論 4 332
  • 正文 年R本政府宣布浪慌,位于F島的核電站冤荆,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏权纤。R本人自食惡果不足惜钓简,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,032評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望汹想。 院中可真熱鬧涌庭,春花似錦、人聲如沸欧宜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽冗茸。三九已至,卻和暖如春匹中,著一層夾襖步出監(jiān)牢的瞬間夏漱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,026評論 1 266
  • 我被黑心中介騙來泰國打工顶捷, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留挂绰,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,473評論 2 360
  • 正文 我出身青樓服赎,卻偏偏與公主長得像葵蒂,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子重虑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,606評論 2 350

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,837評論 25 707
  • 銀杏缺厉,黃了 思念永高,在升騰 落葉飄零的秋天 想起了我四月的情人 風(fēng)隧土,帶來了遠(yuǎn)方的呼喚 那是誰寂寞的歡歌? 葉命爬,蒼涼了...
    甜菜堿閱讀 199評論 1 0
  • 文/子心yjr 憑網(wǎng)的你 ??在一笑一顰間 ?走過千年 ?幾千年的寒夜里 ?你可知 ?我是哪個(gè)網(wǎng)站中 ?輾轉(zhuǎn)的新郎
    子心yjr一廣州閱讀 145評論 0 0
  • “這天地我來過,我奮戰(zhàn)過落萎,我不在乎結(jié)局” 電影《悟空傳》又是一部顛覆西游的故事亥啦,它不是西游記的任何章節(jié),而是悟空的...
    夏與至V閱讀 785評論 1 5
  • 作業(yè)(周五) 我踩的青石板突然往下陷练链,我沒有防備翔脱。我的軀體部分陷到了泥土里,上半身卡在泥土里媒鼓,動(dòng)彈不得届吁,我的頭部還...
    辛夷觀心閱讀 319評論 0 0