如何获得真正的屏幕高度和宽度?
DisplayMetrics metrics = new DisplayMetrics(); this.getWindowManager().getDefaultDisplay().getMetrics(metrics); screenWidth = metrics.widthPixels; screenHeight = metrics.heightPixels;
我使用这些代码来获得屏幕的高度和宽度
我的Nexus7的屏幕高度应该是1280
但它返回1205 …
而我的minSdkVersion是8级
所以我不能使用这些方法:
Display display = getWindowManager().getDefaultDisplay(); Point size = new Point(); display.getSize(size); int screen_width = size.x; int screen_height = size.y;
现在,我应该如何获得正确的屏幕尺寸?
编辑:
if (Build.VERSION.SDK_INT >= 11) { Point size = new Point(); try { this.getWindowManager().getDefaultDisplay().getRealSize(size); screenWidth = size.x; screenHeight = size.y; } catch (NoSuchMethodError e) { Log.i("error", "it can't work"); } } else { DisplayMetrics metrics = new DisplayMetrics(); this.getWindowManager().getDefaultDisplay().getMetrics(metrics); screenWidth = metrics.widthPixels; screenHeight = metrics.heightPixels; }
使用它的作品!
我认为这将工作。 诀窍是你必须使用:
display.getRealSize(size);
不
display.getSize(size);
处理您的API 8编码问题做这样的事情:
try { display.getRealSize(size); height = size.y; } catch (NoSuchMethodError e) { height = display.getHeight(); }
只有更新的API设备会有屏幕上的导航button,因此需要新的方法,旧的设备会抛出一个exception,但不会有屏幕导航,因此旧的方法是好的。
如果需要说明的话:仅仅因为你的项目的最低API等级为8并不意味着你必须在这个级别编译它。 我也使用级别8,但我的项目主要是在13级(3.2)编译,让他们访问了很多新的方法。
我写了一个方法,将尽可能接近API 10到17+。 它应该为API 14+提供真正的宽度和高度,并且它可以用于其他任何事情。
Display display = context.getWindowManager().getDefaultDisplay(); int realWidth; int realHeight; if (Build.VERSION.SDK_INT >= 17){ //new pleasant way to get real metrics DisplayMetrics realMetrics = new DisplayMetrics(); display.getRealMetrics(realMetrics); realWidth = realMetrics.widthPixels; realHeight = realMetrics.heightPixels; } else if (Build.VERSION.SDK_INT >= 14) { //reflection for this weird in-between time try { Method mGetRawH = Display.class.getMethod("getRawHeight"); Method mGetRawW = Display.class.getMethod("getRawWidth"); realWidth = (Integer) mGetRawW.invoke(display); realHeight = (Integer) mGetRawH.invoke(display); } catch (Exception e) { //this may not be 100% accurate, but it's all we've got realWidth = display.getWidth(); realHeight = display.getHeight(); Log.e("Display Info", "Couldn't use reflection to get the real display metrics."); } } else { //This should be close, as lower API devices should not have window navigation bars realWidth = display.getWidth(); realHeight = display.getHeight(); }
您可以使用Display
或DisplayMetrics
find真实的设备尺寸
使用显示器:
private void findRealSize(Activity activity) { Point size = new Point(); Display display = activity.getWindowManager().getDefaultDisplay(); if (Build.VERSION.SDK_INT >= 17) display.getRealSize(size); else display.getSize(size); int realWidth = size.x; int realHeight = size.y; Log.i("LOG_TAG", "realWidth: " + realWidth + " realHeight: " + realHeight); }
使用DisplayMetrics:
private void findRealSize(Activity activity) { DisplayMetrics displayMetrics = new DisplayMetrics(); if (Build.VERSION.SDK_INT >= 17) { activity.getWindowManager().getDefaultDisplay().getRealMetrics(displayMetrics); } else { activity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); } int realWidth = displayMetrics.widthPixels; int realHeight = displayMetrics.heightPixels; Log.i("LOG_TAG", "realWidth: " + realWidth + " realHeight: " + realHeight); }
- 拦截软键盘上的button
- 在Android Studio中查看数据库文件的内容
- 亚行没有回应。 您可以等待更多,或手动杀死“adb.exe”进程,然后单击“重新启动”
- Android:自动selectdebugging/发布Maps v2 api key?
- 如何使用ViewPager将Google Maps V2放在片段上
- Android Studio多Windows一个项目
- Android Studio无法通过错误org.gradle.process.internal.ExecException进行debugging
- 如何增加android应用程序的堆大小?
- 如何在Android Studio的模拟器上启用物理键盘? (曾经工作)