存储和初始化android应用程序的通用值(例如:屏幕密度)
我对Android编程还很陌生,所以如果这是一种错误的方式,请随意评论我的坏习惯 在我的应用程序中,我有使用相同值的不同活动。另外,我有一些类有静态方法,用于多个活动。例如,从“URL”生成ImageView 我几乎在我的所有应用程序中都会用到的一个值是以下代码片段:(摘自) 例如,每个活动都需要此特定值。但同样的任务也需要它。因此,我使用一个静态类,该类具有用于该任务的适当方法。但是,该静态类显然没有“GetApplicationContext”。所以我需要将值存储到其他地方 我的问题是,是否有一种指定的或至少是最佳的或干净的方法来存储这些值并在应用程序启动时初始化它们存储和初始化android应用程序的通用值(例如:屏幕密度),android,android-studio,optimization,Android,Android Studio,Optimization,我对Android编程还很陌生,所以如果这是一种错误的方式,请随意评论我的坏习惯 在我的应用程序中,我有使用相同值的不同活动。另外,我有一些类有静态方法,用于多个活动。例如,从“URL”生成ImageView 我几乎在我的所有应用程序中都会用到的一个值是以下代码片段:(摘自) 例如,每个活动都需要此特定值。但同样的任务也需要它。因此,我使用一个静态类,该类具有用于该任务的适当方法。但是,该静态类显然没有“GetApplicationContext”。所以我需要将值存储到其他地方 我的问题是,是否
据我所知,我可以使用启动活动的“onCreate”方法初始化一些静态类或类似的东西。然而,这对我来说似乎有点脏。也许有比启动活动的onCreate()更早的时间,也有比自定义静态(或单例)类更好的存储值的地方?当我们不知道您要完成的总体目标时,很难确切地告诉您最佳实践是什么,但我有一点要说,我认为这是足够抽象的,在这里是相关的 始终使用当前的
上下文
。不要存储上下文
或试图“绕过”必须将上下文
参数传递给方法的情况
(当然总会有例外,但这是一条很好的经验法则。)
在这种情况下,我建议使用静态帮助器方法创建一个类:
public class MyUtils {
private MyUtils() {
throw new UnsupportedOperationException("static methods only");
}
public static float getDisplayDensity(Context context) {
return context.getResources().getDisplayMetrics().density;
}
}
您可以从任何活动中调用它,如下所示:
float density = MyUtils.getDisplayDensity(this);
float density = MyUtils.getDisplayDensity(getContext());
或者从任何片段
或视图
中,如下所示:
float density = MyUtils.getDisplayDensity(this);
float density = MyUtils.getDisplayDensity(getContext());
通常,当人们发布有关DisplayMetrics
和密度的问题时,他们真正想做的是将dp
单位转换为px
单位。例如,他们知道他们想要的东西是48dp
,但他们需要将像素值传递给某个Android方法,因此他们想要乘以显示密度
在这些情况下,最好使用dimen
资源。您可以定义:
<dimen name="my_dimension">48dp</dimen>
谢谢你的回答!然而,我还有一个后续问题。像密度这样的东西在不同的设备之间是不同的,对吗?静态声明的“dimen”在这里究竟有什么帮助?dp
单位是“密度无关像素”;48 dp在每个设备上应大致相同的真实尺寸(略小于1厘米),但根据显示器的密度,将对应不同数量的物理像素。如果密度为mdpi,则48dp==48px。如果密度为xhdpi,则48dp==96px。当您将资源框架与dimens资源一起使用时,此转换将基于当前设备自动完成。非常酷!谢谢除了trail和error之外,有没有其他方法可以在android studio中查看大小维度,例如48dp,而无需对我的操作建立一些控制来测试它?