Android开发 获取屏幕宽高及尺寸的方法
来源:互联网 发布:java数组调用方法 编辑:程序博客网 时间:2024/05/02 02:36
// 通过WindowManager获取 DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); System.out.println("width-display :" + dm.widthPixels); System.out.println("heigth-display :" + dm.heightPixels);// 通过Resources获取 DisplayMetrics dm2 = getResources().getDisplayMetrics(); System.out.println("width-display :" + dm2.widthPixels); System.out.println("heigth-display :" + dm2.heightPixels);// 获取屏幕的默认分辨率 Display display = getWindowManager().getDefaultDisplay(); System.out.println("width-display :" + display.getWidth()); System.out.println("heigth-display :" + display.getHeight());
以上为获取屏幕宽高分辨率的三种方法
安卓6.0的NEXUS 6手机使用以上方法取得准确的宽度分辨率,但是高度分辨率并不准确(与状态栏和主题有关,某些情况下准确),如何获取完全准确的宽、高分辨率请参考下文;在安卓4.2系统的某手机中,使用方法一得到了正确的屏幕尺寸值,而使用方法二和三得到的值全部为零。原因不祥。其中方法三中的display.getWidth()和display.getHeight()已被弃用。
DisplayMetrics dm = new DisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(dm);//display = getWindowManager().getDefaultDisplay();//display.getMetrics(dm)(把屏幕尺寸信息赋值给DisplayMetrics dm);width = dm.widthPixels;height = dm.heightPixels;xdpi = dm.xdpi;ydpi = dm.ydpi;density = dm.densityDpi;fdensity = dm.density;
查询log,得到各值如下:
D/Lichking(22643): -----------widthpixels---540
D/Lichking(22643): -----------heightpixels---960
D/Lichking(22643): -----------xdpi---244.92857
D/Lichking(22643): -----------ydpi---246.30302
D/Lichking(22643): -----------density---240
D/Lichking(22643): -----------fdensity---1.5
//pixel = dip*density; private int convertDpToPixel(int dp) { DisplayMetrics displayMetrics = mContext.getResources().getDisplayMetrics(); return (int)(dp*displayMetrics.density); } private int convertPixelToDp(int pixel) { DisplayMetrics displayMetrics = mContext.getResources().getDisplayMetrics(); return (int)(pixel/displayMetrics.density); }
由于根据以上方法获取屏幕尺寸会有部分情况因为状态栏或其他缘故获取不到正确的分辨率,所以获取准确的分辨率可用以下方式获得:
private void getDisplayInfomation() { Point point = new Point(); getWindowManager().getDefaultDisplay().getSize(point); Log.d(TAG,"the screen size is "+point.toString()); //获取正确尺寸 (此方法要求最低api为17,即安卓4.2,4.2之前获取请参看以下获取屏幕尺寸的方法) getWindowManager().getDefaultDisplay().getRealSize(point); Log.d(TAG,"the screen real size is "+point.toString()); }
获取屏幕尺寸的方法如下:
private static double mInch = 0; /** * 获取屏幕尺寸 * @param context * @return */ public static double getScreenInch(Activity context) { if (mInch != 0.0d) { return mInch; } try { int realWidth = 0, realHeight = 0; Display display = context.getWindowManager().getDefaultDisplay(); DisplayMetrics metrics = new DisplayMetrics(); display.getMetrics(metrics); if (android.os.Build.VERSION.SDK_INT >= 17) { Point size = new Point(); display.getRealSize(size); realWidth = size.x; realHeight = size.y; } else if (android.os.Build.VERSION.SDK_INT < 17 && android.os.Build.VERSION.SDK_INT >= 14) { Method mGetRawH = Display.class.getMethod("getRawHeight"); Method mGetRawW = Display.class.getMethod("getRawWidth"); realWidth = (Integer) mGetRawW.invoke(display); realHeight = (Integer) mGetRawH.invoke(display); } else { realWidth = metrics.widthPixels; realHeight = metrics.heightPixels; } mInch =formatDouble(Math.sqrt((realWidth/metrics.xdpi) * (realWidth /metrics.xdpi) + (realHeight/metrics.ydpi) * (realHeight / metrics.ydpi)),1); } catch (Exception e) { e.printStackTrace(); } return mInch; } /** * Double类型保留指定位数的小数,返回double类型(四舍五入) * newScale 为指定的位数 */ private static double formatDouble(double d,int newScale) { BigDecimal bd = new BigDecimal(d); return bd.setScale(newScale, BigDecimal.ROUND_HALF_UP).doubleValue(); }
1 0
- Android开发 获取屏幕宽高及尺寸的方法
- Android获取屏幕宽高及状态栏高度的方法
- Android获取屏幕尺寸的方法
- Android 获取屏幕宽度尺寸的方法
- Android开发获取屏幕的宽高
- android,获取屏幕宽高的方法
- android 获取屏幕尺寸方法
- Android屏幕宽高获取和尺寸单位
- 屏幕尺寸,控件尺寸的获取方法
- Android基础篇-自动获取屏幕的尺寸及密度
- Android开发,获取屏幕高和宽的三种方法
- Android开发中获取屏幕宽高的几种方法
- JavaScript - window 尺寸 ( 获取屏幕宽高 )
- android上准确获取屏幕尺寸的方法
- Android 获取屏幕实际显示尺寸的方法
- Android中获取屏幕物理尺寸的方法
- Android获取屏幕尺寸的4种方法
- Android屏幕各尺寸的获取方法详解
- 2016.11.5GDOI模拟总结
- CODEVS 1077多源最短路
- shell编程之字符命令
- 设计模式之单例模式
- Android-----SimpleAdapter创建ListView的实例,及值得注意的一些细节问题
- Android开发 获取屏幕宽高及尺寸的方法
- HDU 1215 七夕节
- effective C++之模板元编程
- SQL case when语法
- HDU 1214 圆桌会议(思维)
- linux 查看内存
- 【web】模拟京东项目-demo01(广告栏、导航条)
- 动态自动匹配输入的控件AutoCompleteTextView和MultiAutoCompleteTextView
- redis异常记录