获取屏幕的宽高,通常方法如下几种:
// 获取屏幕密度(一)
Display display = getActivity().getWindowManager().getDefaultDisplay();
int screenWidth = display.getWidth(); // 屏幕宽int screenHeight = display.getHeight(); // 屏幕高// 获取屏幕密度(二)DisplayMetrics dm = getResources().getDisplayMetrics();int screenWidth = dm.widthPixels; // 屏幕宽int screenHeight = dm.heightPixels; // 屏幕高// 获取屏幕密度(三)DisplayMetrics dm = new DisplayMetrics();getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm);int screenWidth = dm.widthPixels; // 屏幕宽int screenHeight = dm.heightPixels; // 屏幕高
但是这几个方法有点问题,正常的手机没毛病,但是android4.0之后有了虚拟按键,有虚拟按键的系统调用上面的方法尺寸会减去虚拟按键的尺寸。
解决方法如下:①API 17 之后提供了方法DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getRealMetrics(dm);int width = dm.widthPixels; // 屏幕宽int height = dm.heightPixels; // 屏幕高
②在API 17之前通过反射获取
Display display = getWindowManager().getDefaultDisplay();DisplayMetrics dm = new DisplayMetrics();@SupPRessWarnings("rawtypes")Class c;try { c = Class.forName("android.view.Display"); @SuppressWarnings("unchecked") Method method = c.getMethod("getRealMetrics",DisplayMetrics.class); method.invoke(display, dm);}catch(Exception e){ e.printStackTrace();}int width = dm.widthPixels;int height = dm.heightPixels;
新闻热点
疑难解答