在使用android资源从dp转换为像素时,我注意到我需要使用getResources().getDisplayMetrics().density
。这段代码引起了我的疑问。
1)基于上面的代码,getResources()
必须返回上面的不同资源,否则getDisplayMetrics().density
如何能够在不同的设备上返回不同的密度。我在这个假设中是否正确?或者getDisplayMetrics()
在不同的设备上返回不同的DisplayMetrics
吗?
2)另外,我认为getResources()
会返回设备中的资源。如果是这样,我不能从一开始就使用该方法。我的意思是声明方法如图所示
Class mainactivity extends Activity(){
Resources test =getResources()
@Override
protected void onCreate(){
}
}
我在onCreate()方法之外声明了该方法。但是,这不起作用。 getResources()
仅在您在活动生命周期中声明它时才有效。任何人都可以告诉我为什么我必须在活动生命周期中getResources(),getResources()
应该返回整个设备资源?
如果我的问题不清楚,我会尽力澄清你是否发表评论。
答案 0 :(得分:1)
根据IEEE Std 1003.1, 2013 Edition getResources“返回应用程序包的一个Resources实例”而不是你的设备。这可能是您无法在活动生命周期之外访问它的原因。方法getResources实际上返回res目录下的资源和getResources.getDisplayMetrics根据Android Reference Guide“返回对此资源对象有效的当前显示指标”,我认为这意味着当前有效的布局。
答案 1 :(得分:0)
您必须使用活动生命周期调用getResources(),因为活动在实例化对象时没有“准备好”充当完整的Context。在您使用Android之前,Android会进行一些额外的设置。
您需要为每个活动获取一个新的Resource实例,因为Resources包含许多不同的东西,这些东西可能因设备条件的变化而有所不同。例如,您可能针对不同的方向使用不同的布局,或者针对不同的语言使用不同的字符串。只要求每个新活动的资源不早于onCreate(),并相信它将访问正确的东西。