当我没有活动对象来获取窗口管理器时,如何获得屏幕密度?



我正在写一个控制库,我想得到当前设备的屏幕密度,然后用它来绘制一些东西。当我没有活动对象来获取windowManager时,如何获取屏幕密度?

DisplayMetrics metric = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metric);
int width = metric.widthPixels;
int height = metric.heightPixels;
float density = metric.density;

我猜您的方法在一个类中。因此,如果您有一个可访问的Context对象,请使用上下文的getResources().getDisplayMetrics()方法!

上下文在android中无处不在。如果您有一个视图,您可以通过在视图上调用getContext来获取上下文。如果你有一个活动,那就更好了,因为活动Context

也就是说,您需要一个Context对象!

您的方法必须在类中。因此,您可以向类中添加Context字段,也可以向构造函数中添加参数,并让客户端代码为您提供上下文:

private Context context;
public YourClassName (Context c) {
    context = c;
}

这个东西已经在android中实现了很多次。例如CCD_ 7的构造函数和CCD_。

您只需要一个contextapplicationactivity:

DisplayMetrics dm = context.getResources().getDisplayMetrics();

最新更新