Android另類判斷NavigationBar虛擬導(dǎo)航欄狀態(tài)

好久沒(méi)碼字了,所以出來(lái)冒個(gè)泡

一直用著華為的手機(jī),從一開(kāi)始就覺(jué)得華為的虛擬導(dǎo)航欄用著還是挺順手的,后來(lái)發(fā)現(xiàn)越來(lái)越多的機(jī)子都開(kāi)始使用起來(lái),查看源碼發(fā)現(xiàn),虛擬導(dǎo)航欄是屬于SystemUI的一部分。

再一看手機(jī),還提供了隱藏虛擬按鍵的按鈕,于是就想,能不能有一個(gè)方法判斷導(dǎo)航欄是否顯示?基于不重復(fù)造輪子的思想,先是網(wǎng)上搜索了一把,方法都大同小異,但一用,發(fā)現(xiàn)挺多新手機(jī)都無(wú)法適配,于是從另一種方向思考如何判斷NavigationBar虛擬導(dǎo)航欄是否顯示?

思考:從DecorView這個(gè)神View入手,因?yàn)榭紤]到我們碼的代碼基本都在DecorView中一個(gè)id為android.R.id.content的容器中,那好,就根據(jù)content的容器寬高判斷虛擬導(dǎo)航欄是否顯示,于是就有了下面的代碼。

package com.lkuan.gek.util;

import android.content.Context;
import android.content.res.Configuration;
import android.graphics.Point;
import android.graphics.Rect;
import android.support.annotation.NonNull;
import android.view.Display;
import android.view.View;
import android.view.Window;

/**
 * @author lkuan
 * Create on 2018/5/25
 */
public class NavigationBarUtil {

    /**
     * 判斷虛擬導(dǎo)航欄是否顯示
     *
     * @param context 上下文對(duì)象
     * @param window  當(dāng)前窗口
     * @return true(顯示虛擬導(dǎo)航欄),false(不顯示或不支持虛擬導(dǎo)航欄)
     */
    public static boolean checkNavigationBarShow(@NonNull Context context, @NonNull Window window) {
        boolean show;
        Display display = window.getWindowManager().getDefaultDisplay();
        Point point = new Point();
        display.getRealSize(point);

        View decorView = window.getDecorView();
        Configuration conf = context.getResources().getConfiguration();
        if (Configuration.ORIENTATION_LANDSCAPE == conf.orientation) {
            View contentView = decorView.findViewById(android.R.id.content);
            show = (point.x != contentView.getWidth());
        } else {
            Rect rect = new Rect();
            decorView.getWindowVisibleDisplayFrame(rect);
            show = (rect.bottom != point.y);
        }
        return show;
    }
}

經(jīng)測(cè)試,手上大部分手機(jī)都能正確得到結(jié)果,支持無(wú)虛擬按鍵的判斷。

手機(jī)碼字挺不容易的
附上一個(gè)民咕嚕的表情包娛樂(lè)一下_

圖片發(fā)自簡(jiǎn)書App

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容