Правильный способ получения DisplayMetrics: getResources() или getWindowManager()
Каким образом можно получить DisplayMetrics, т.е. получить информацию о экране/дисплее, такую как density
или xdpi
?
Я спрашиваю, потому что я видел два способа обойти это:
FIRST:
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
затем получить информацию по metrics.density
или metrics.xdpi
и т.д.
ВТОРАЯ:
getResources().getDisplayMetrics().density
в этом методе, я считаю, вы также можете просто инициализировать переменную, чтобы удерживать DisplayMetric, а затем захватывать информацию, как в методе FIRST:
DisplayMetrics metricsMethodTwo = getResources().getDisplayMetrics()
а затем вы можете получить информацию, как обычно: metricsMethodTwo.density
или metricsMethodTwo.xdpi
Я видел оба в разных местах в Документах. Итак, каковы различия, если таковые имеются, и когда один метод благоприятствует (или более подходит) другому и почему? Благодаря
Ответы
Ответ 1
public DisplayMetrics getDisplayMetrics ()
Верните текущие показатели отображения , которые действуют для этого ресурса. Возвращаемый объект должен рассматриваться как доступный только для чтения.
public void getMetrics (DisplayMetrics outMetrics)
Инициализировать объект DisplayMetrics из этих отображаемых данных.
Разница в том, что метрики, возвращаемые методом Resources
, являются метриками для этого конкретного объекта Resources
. Вы всегда можете создать новый экземпляр Resources
с конструктором
Resources(AssetManager assets, DisplayMetrics metrics, Configuration config)
в котором вы можете установить любые требуемые показатели, а не обязательно метрики, которые вы можете получить из экземпляра Display
, возвращаемого методом getDefaultDisplay()
.
Это различие. Это может не повлиять на значения, если вы используете только ресурсы по умолчанию и отображение по умолчанию.