Android獲取屏幕實際高度跟顯示高度,判斷Android設備是否擁有虛擬功能鍵


一般的獲取屏幕尺寸,但是不包括虛擬功能高度

/**
 * 獲取屏幕尺寸,但是不包括虛擬功能高度
 *
 * @return
 */
public int getNoHasVirtualKey() {
    int height = getWindowManager().getDefaultDisplay().getHeight();
    return height;
}

但是今天我們測試找我就說你的webview界面有問題呀下面怎么一塊空白,我看看就發現空白的手機是華為的有軟鍵盤的那種

我們這個方法獲取的高度不包含虛擬鍵盤的高度

通過反射,獲取包含虛擬鍵的整體屏幕高度

/**
 * 通過反射,獲取包含虛擬鍵的整體屏幕高度
 *
 * @return
 */
private int getHasVirtualKey() {
    int dpi = 0;
    Display display = getWindowManager().getDefaultDisplay();
    DisplayMetrics dm = new DisplayMetrics();
    @SuppressWarnings("rawtypes")
    Class c;
    try {
        c = Class.forName("android.view.Display");
        @SuppressWarnings("unchecked")
        Method method = c.getMethod("getRealMetrics", DisplayMetrics.class);
        method.invoke(display, dm);
        dpi = dm.heightPixels;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return dpi;
}

虛擬鍵的高度

getHasVirtualKey() - getNoHasVirtualKey()

隱藏虛擬按鍵

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
    ((Activity) context).getWindow().getDecorView().setSystemUiVisibility(
            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 
                    | View.SYSTEM_UI_FLAG_FULLSCREEN 
                    | View.SYSTEM_UI_FLAG_IMMERSIVE);//API19
} else {
    ((Activity) context).getWindow().getDecorView().setSystemUiVisibility(
            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 
                    | View.SYSTEM_UI_FLAG_FULLSCREEN 
    );
}

好了就這樣


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM