旧版Android操作系统版本不支持getSize(),不推荐使用getWidth()/ getHeight()

那么如何编写代码来适应这个呢? 我不希望在代码中留下弃用的API调用,但我也不想丢失具有(稍微)较旧设备的用户。 有什么兼容性设置我可以实现?

相对。 码

Display display = getWindowManager().getDefaultDisplay(); Point size = new Point(); display.getSize(size); int screen_width = size.x; int screen_height = size.y; 

与较旧的方法相比:

 int screen_width = getWindowManager().getDefaultDisplay().getWidth(); int screen_height = getWindowManager().getDefaultDisplay().getHeight(); 

Solutions Collecting From Web of "旧版Android操作系统版本不支持getSize(),不推荐使用getWidth()/ getHeight()"

最好的(也是最好的,我的意思是每次都能工作的选项)选项就是使用reflection。 查看Android 向后兼容性 向后兼容性指南(更新reflection文章的新位置)。

虽然tyczj的答案将完美的工作,只要被弃用的function仍然在SDK中,只要他们被删除,你将无法使用它们或在较旧的设备上运行你的应用程序,如果你仍然想build立在最新的SDK 。

reflection通过在运行时有效地dynamic检测函数来解决这个问题,这意味着即使您构build的是ICS,只要minSdkVersion是正确的,就可以让您的应用程序在具有Gingerbread或Froyo的设备上运行。

我有两个函数,发送上下文和gettin高度和宽度像素。

 public static int getWidth(Context mContext){ int width=0; WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE); Display display = wm.getDefaultDisplay(); if(Build.VERSION.SDK_INT>Build.VERSION_CODES.HONEYCOMB){ Point size = new Point(); display.getSize(size); width = size.x; } else{ width = display.getWidth(); // deprecated } return width; } 

 public static int getHeight(Context mContext){ int height=0; WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE); Display display = wm.getDefaultDisplay(); if(Build.VERSION.SDK_INT>Build.VERSION_CODES.HONEYCOMB){ Point size = new Point(); display.getSize(size); height = size.y; }else{ height = display.getHeight(); // deprecated } return height; } 

你可以做这样的事情

 if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH){ //do stuff pertaining to this version here }else{ //other versions } 

我认为RivieraKid所暗示的那样,会是这样的:

 static Point getDisplaySize(Display d) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { return getDisplaySizeGE11(d); } return getDisplaySizeLT11(d); } @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2) static Point getDisplaySizeGE11(Display d) { Point p = new Point(0, 0); d.getSize(p); return p; } static Point getDisplaySizeLT11(Display d) { try { Method getWidth = Display.class.getMethod("getWidth", new Class[] {}); Method getHeight = Display.class.getMethod("getHeight", new Class[] {}); return new Point(((Integer) getWidth.invoke(d, (Object[]) null)).intValue(), ((Integer) getHeight.invoke(d, (Object[]) null)).intValue()); } catch (NoSuchMethodException e2) // None of these exceptions should ever occur. { return new Point(-1, -1); } catch (IllegalArgumentException e2) { return new Point(-2, -2); } catch (IllegalAccessException e2) { return new Point(-3, -3); } catch (InvocationTargetException e2) { return new Point(-4, -4); } } 

我通常有一个超类,即。 用一个通用的方法来获取当前屏幕大小的一个点的BaseActivity。 在实际活动中保持一切美好和干净。

 /** * Return screen size as a point. * @return */ @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2) @SuppressWarnings("deprecation") protected Point getSize() { final Point point = new Point(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) { getWindowManager().getDefaultDisplay().getSize(point); } else { final Display display = getWindowManager().getDefaultDisplay(); point.x = display.getWidth(); point.y = display.getHeight(); } return point; }