android 怎么获取当前使用的屏幕分辨率

 我来答
微博honey_11
2016-12-12 · TA获得超过191个赞
知道小有建树答主
回答量:304
采纳率:100%
帮助的人:330万
展开全部

请看下面截图,例子来自android学习手册,360手机助手中下载,排到第4个,里面有108个例子、源码还有文档

我们在网上看得最多的应该是以下这个方法:

WindowManager wm = getWindowManager();      

Display display = wm.getDefaultDisplay();     

int screenWidth = display.getWidth();      

int screenHeight = display.getHeight();   

但studio提示它已经过时了,建议不再使用。

再去查看android源码,发现可使用getSize替代,代码如下:

public static Point getSize(Activity act) {  

    Display display = act.getWindowManager().getDefaultDisplay();  

    Point size = new Point();  

    display.getSize(size);  //size.x就是宽度,size.y就是高度  

    return size;  

}  

一段时间后发现getWindowManager方法只能在activity中使用或者被activity实例调用,那像我们在Fragment或者Adapter中想获得屏幕分辨率,又有困难了(因为Fragment和Adapter一般只有Context),虽然可以通过强制类型转换来处理,可是毕竟劳民伤财需要时时记得去转换。所以又改了从Context获取系统服务,然后再去取分辨率,改后的代码如下:

public static Point getSize(Context ctx) {  

    WindowManager wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE);  

    Display display = wm.getDefaultDisplay();  

    Point size = new Point();  

    display.getSize(size);  

    return size;  

}  

再后来发现通过DisplayMetrics也能获取分辨率

public static Point getSizeNew(Context ctx) {  

    WindowManager wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE);  

    DisplayMetrics dm = new DisplayMetrics();  

    wm.getDefaultDisplay().getMetrics(dm);  

    Point size = new Point();  

    size.x = dm.widthPixels*dm.density;  

    size.y = dm.heightPixels*dm.density;  

    return size;  

}  

不久便发现这个新方法时常量错了,结果确认widthPixels和heightPixels就是宽和高,无需再乘上density。因为widthPixels和heightPixels的单位都是像素,而density指的是像素密度,即一个单位内有几个像素,所以在我这边乘上density没有意义,只有除以density才有意义。dm.widthPixels/dm.density指的是宽度上有多少单位,dm.heightPixels/dm.density指的是高度上有多少单位。网上乘以density的做法,可能只是他们恰好遇上部分特殊机型罢了。最后的代码如下:

public static Point getSizeNew(Context ctx) {  

    WindowManager wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE);  

    DisplayMetrics dm = new DisplayMetrics();  

    wm.getDefaultDisplay().getMetrics(dm);  

    Point size = new Point();  

    size.x = dm.widthPixels;  

    size.y = dm.heightPixels;  

    return size;  

}  

竹暗林箫
2016-12-14
知道答主
回答量:45
采纳率:0%
帮助的人:8.3万
展开全部
程序员还是普通用户
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
封号斗罗1997
2016-12-12 · 超过14用户采纳过TA的回答
知道答主
回答量:59
采纳率:0%
帮助的人:23.8万
展开全部
可以用跑分类软件查看,望采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式