最近开发项目需要动态适配大图片的布局,需要获取屏幕宽高来比例适配,看了许多大牛的博客,自己整理下获取屏幕宽高的几种方式。屏幕宽高分两种:
应用屏幕宽高
:不包括了状态栏(刘海屏,水滴屏等),导航栏等系统装饰UI所占用的空间
实际屏幕宽高
:包括了状态栏(刘海屏,水滴屏等),导航栏等系统装饰UI所占用的空间
获取屏幕离不开:Display 、DisPlayMetrics
Display
Provides information about the size and density of a logical display.
获取Display的方式
- 任意Context
public getDispaly(Context context){
(WindowManager) (context.getApplicationContext().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
}
- 在Activity中通过Activity
public Display getDisplay(Activity activity){
activity.getWindowManager().getDefaultDisplay();
}
两种方式差别就是获取WindowManager的方式不一样
通过DisPlay获取应用屏幕宽高
1、可通过Display的getWidth()、getHeight()来获取:
不过此方法在API15已被弃用
public int getScreenWidth(Context context){
getDisplay(context).getWidth();
//getDisplay().getHeight();
}
2、可通过Display的getSize(Point out)来获取:
public int getScreenWidth(Context context){
Point point=new Point();
getDisplay(context).getSize(point);
return point.x;
//return point.y;
}
通过Display获取实际屏幕宽高
可通过Display的getRealSize(Point out)来获取
public int getScreenWidth(Context context){
Point point=new Point();
getDisplay(context).getRealSize(point);
return point.x;
//return point.y;
}
DisplayMetrics
A structure describing general information about a display, such as its size, density, and font scaling.
获取DisplayMetrics的方式
1、通过Display的getMetrics(DisplayMetrics metrics)
API30已弃用
public DisplayMetrics getDisplayMetrics(Context context){
DisplayMetrics metrics=new DisplayMetrics();
getDisplay(context).getMetrics(metrics);
return metrics
}
2、通过Resouces获取
public DisplayMetrics getDisplayMetrics(Context context){
return context.getResource().getDisplayMetrics();
}
通过DisplayMetrics 获取应用屏幕宽高
public int getScreenWidth(Context context){
return getDisplayMetrics(contex).widthPixels;
//return getDisplayMetrics(contex).heigthPixels;
}
通过DisplayMetrics 获取实际屏幕宽高
public int getScreenWidth(Context context){
DisPlayMetrics metrics=new DisplayMetrics();
getDisPlay(context).getRealMetrics(metrics);
return metrics.widthPixels;
//return metrics.heightPixels;
}