Java 是否每个android设备getResource()方法都返回不同的资源?

Java 是否每个android设备getResource()方法都返回不同的资源?,java,android,Java,Android,在使用android资源将dp转换为像素时,我注意到我需要使用getResources().getDisplayMetrics().density。这段代码就是困惑所在,它引导我提出我的问题 1) 基于上述代码,getResources()必须返回上述不同的资源,否则getDisplayMetrics().density如何在不同的设备上返回不同的密度。我的假设正确吗?或者getDisplayMetrics()是否在不同的设备上返回不同的DisplayMetrics 2) 另外,我认为getRe

在使用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()


如果我的问题不清楚,如果您留下评论,我会尽力澄清。

您必须在活动生命周期中调用getResources(),因为在实例化对象时,该活动还没有“准备好”像完整上下文一样运行。Android在你使用它之前会做一些额外的设置


您需要在每个活动中获得一个新的资源实例,因为资源包含许多不同的内容,随着设备条件的变化,这些内容可能会有所不同。例如,不同的方向可能有不同的布局,不同的语言可能有不同的字符串。只需在onCreate()之前向每个新活动请求资源,并相信它将访问正确的内容。

根据getResources,“返回应用程序包的资源实例”,而不是设备的资源实例。因此,这可能是您无法在活动生命周期之外访问它的原因。getResources方法实际上返回res目录下的资源和getResources.getDisplayMetrics,根据“返回对该资源对象有效的当前显示指标”,我认为这意味着当前有效的布局。

您是否只是试图编写代码来转换dp中的数字(例如,在变量中)在px中为设备指定一个数字?是的,这就是我上面的代码,但混淆之处在于getResources()部分,就像我上面解释的。1。你想说什么<代码>资源有很好的文档记录,而且您似乎遗漏了一些东西。2.您不能在活动生命周期之外
getResources()
这是一个问题吗?如果是,则说明您使用了错误的代码,因为在有效上下文之外的
资源
实例中,您不需要任何东西。感谢您的回答,我已经查看了该代码,并且使用了它。然而,我真的很困惑getResources()是否会为不同的设备返回不同的内容,因为显然,不同设备的密度是不同的。资源中有很多不同的内容,这些内容可能会根据设备的环境发生巨大的变化。例如,如果布局资源在横向和纵向上不同,则如何确定要使用的布局资源。每次只需获取一个新资源,并用于每个新活动实例。