在实际应用中,为了适配屏幕,要知道所用的手机的分辨率。
本篇文章借鉴于http://blog.csdn.net/lincyang/article/details/42679589
并应用于实际项目中,得到了很大的帮助,感谢该博主的分享
1.获取分辨率
Android 早期的版本可以通过getHeight(),getWidth()获取屏幕宽高,现在已经不推荐使用了
现在获取分辨率的可使用getSize();//方法的原型可参考API
public void getDisplayInfo(){
Point point = new Point();
getWindowManager().getDefaultDisplay().getSize(point);
Log.e("TAG","==屏幕分辨率=="+point.toString());
//getWindowManager().getDefaultDisplay().getRealSize(point);
//Log.e("TAG","==屏幕分辨率=="+point.toString());
}
另外,Android还提供了一种方法getRealSize();
这两种方法有一定的区别:通常情况下两者的返回值并无差别
但是,在Androidmanifest.xml设置不同的主题后,两者会有差别
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
Activity继承ActionBarActivity
>注:这种方式也有可能不会有差别,读者可参考以上分享博文
2、屏幕密度
屏幕密度:DPI
public void getDensity(){
DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
Log.e("TAG",Density is "+displayMetrics.density+
"densityDpi is "+displayMetrics.densityDpi +"height:"+displayMetrics.heightPixels
+"width: "+displayMetrics.widthPixels );
}
3、屏幕尺寸
屏幕尺寸:对角线长度,单位:英寸,1英寸=2.54厘米
public void getScreenSizeOfDevice(){
Point point = new Point();
getWindowManager().getDefaultDisplay().getRealSize(point);
DisplayMetrics dm = getResources().getDisplayMerics();
double x = Math.pow(point.x/dm.xdpi,2);
double y = Math.pow(point.y/dm.ydpi,2);
double screenInches = Math.sqrt(x+y);
Log.d(TAG, "Screen inches : " + screenInches);
}
4、DIP即dp,与密度无关的像素,现在常在布局文件中使用
官方推荐使用dp是因为它会根据你设备的密度算出相应的像素值,px = dp*density;
>注意:在Java代码中对控件设置宽高是不可以设置单位的,其自带的单位是像素,如果需要动态修改控件大小时,就要实现px 与dp之间的转换
代码:
//px = dp*density
public int dpTopx(int dp){
DisplayMetrics displayMetrics = mContext.getResources().getDisplayMetrics();
return (int)(dp*displayMetrics.density);
}
public int pxTodp(int px){
DisplayMetrics displayMetrics = mContext.getResources().getDisplayMetrics();
return (int)(px/displayMetrics.density);
}