如何以编程方式获得Nexus 7(flo)真正的屏幕分辨率?

时间:2015-01-06 11:20:49

标签: android nexus-7

我的设备是Nexus 7(Flo)。我想获得真正的屏幕分辨率,高度为1920,但是代码

DisplayMetrics displayMetrics = mContext.getResources().getDisplayMetrics();
int   mPageHeight = displayMetrics.heightPixels;

返回1824,这是1920减去NavigationBar高度(48dp)的结果。 我知道在沉浸式模式下,decorView的高度是1920.但我想在" onCreate"中获得价值。活动中的方法。 DecorView的高度分配得太晚了。

那么如何获得真正的屏幕分辨率?

或者是否有可靠的方法来了解底部的NavigationBar是否正在显示?您知道大多数设备都没有这个NavigationBar。

2 个答案:

答案 0 :(得分:0)

您可以使用此代码

获得全屏分辨率
View decorView = context.getActivity().getWindow().getDecorView();
Point outSize = new Point();

decorView.getDisplay().getRealSize(outSize);
Log.i("ImmersiveHeight : "+outSize.y);

使用此代码

将沉浸式模式设置为您的活动
final 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
                    | View.SYSTEM_UI_FLAG_FULLSCREEN 
                    | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;

decorView.setSystemUiVisibility(uiOptions);

答案 1 :(得分:0)

此代码生效!我终于得到了1920x1200!

 public void printHeight(){
    int width = 0, height = 0;
    final DisplayMetrics metrics = new DisplayMetrics();
    Display display = getWindowManager().getDefaultDisplay();
    Method mGetRawH = null, mGetRawW = null;

    try {
        // For JellyBean 4.2 (API 17) and onward
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) {
            display.getRealMetrics(metrics);

            width = metrics.widthPixels;
            height = metrics.heightPixels;
            Log.i("ZYStudio", "with and height:"+width+"|"+height);
        } else {
            mGetRawH = Display.class.getMethod("getRawHeight");
            mGetRawW = Display.class.getMethod("getRawWidth");
            Log.i("ZYStudio", "rawW and rawH:"+mGetRawW+"|"+mGetRawH);

            try {
                width = (Integer) mGetRawW.invoke(display);
                height = (Integer) mGetRawH.invoke(display);
            } catch (IllegalArgumentException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    } catch (NoSuchMethodException e3) {
        e3.printStackTrace();
    }
}