我的设备是Nexus 7(Flo)。我想获得真正的屏幕分辨率,高度为1920,但是代码
DisplayMetrics displayMetrics = mContext.getResources().getDisplayMetrics();
int mPageHeight = displayMetrics.heightPixels;
返回1824,这是1920减去NavigationBar高度(48dp)的结果。 我知道在沉浸式模式下,decorView的高度是1920.但我想在" onCreate"中获得价值。活动中的方法。 DecorView的高度分配得太晚了。
那么如何获得真正的屏幕分辨率?
或者是否有可靠的方法来了解底部的NavigationBar是否正在显示?您知道大多数设备都没有这个NavigationBar。
答案 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();
}
}