Трудно сказать вам точно, что такое лучшая практика, когда мы не знаем точно, чего вы пытаетесь достичь в целом, но у меня есть точка зрения, которая, на мой взгляд, достаточно абстрактна, чтобы иметь отношение к делу *. 1001 *
Всегда использовать текущий Context
. Не храните Context
или иным образом не пытайтесь "обойти" необходимость передавать аргумент Context
в методы.
(Конечно, всегда есть исключения, но это хорошее эмпирическое правило.)
В этом конкретном случае я бы рекомендовал создать класс с помощью статического вспомогательного метода:
public class MyUtils {
private MyUtils() {
throw new UnsupportedOperationException("static methods only");
}
public static float getDisplayDensity(Context context) {
return context.getResources().getDisplayMetrics().density;
}
}
И вы можете позвонить с любого Activity
, например:
float density = MyUtils.getDisplayDensity(this);
Или из любого Fragment
или View
, например:
float density = MyUtils.getDisplayDensity(getContext());
Часто, когда люди пишут вопросы о DisplayMetrics
и плотности, они действительно пытаются конвертировать dp
единицы в px
единицы. Например, они знают, что хотят, чтобы что-то было 48dp
, но им нужно передать значение пикселя в некоторый метод Android, поэтому они хотят умножить на плотность отображения.
В этих случаях вам лучше использовать ресурсы dimen
. Вы можете определить:
<dimen name="my_dimension">48dp</dimen>
И тогда вы можете легко получить это в px
единицах, позвонив
getResources().getDimensionPixelSize(R.dimen.my_dimension);