每个android设备的getResource()方法都会返回不同的资源吗?

时间:2016-02-21 02:54:48

标签: java android

在使用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()应该返回整个设备资源?

如果我的问题不清楚,我会尽力澄清你是否发表评论。

2 个答案:

答案 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(),并相信它将访问正确的东西。