Подтвердить что ты не робот

Правильный способ получения 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

Я видел оба в разных местах в Документах. Итак, каковы различия, если таковые имеются, и когда один метод благоприятствует (или более подходит) другому и почему? Благодаря

4b9b3361

Ответ 1

public DisplayMetrics getDisplayMetrics ()

Верните текущие показатели отображения , которые действуют для этого ресурса. Возвращаемый объект должен рассматриваться как доступный только для чтения.

public void getMetrics (DisplayMetrics outMetrics)

Инициализировать объект DisplayMetrics из этих отображаемых данных.

Разница в том, что метрики, возвращаемые методом Resources, являются метриками для этого конкретного объекта Resources. Вы всегда можете создать новый экземпляр Resources с конструктором

Resources(AssetManager assets, DisplayMetrics metrics, Configuration config)

в котором вы можете установить любые требуемые показатели, а не обязательно метрики, которые вы можете получить из экземпляра Display, возвращаемого методом getDefaultDisplay().

Это различие. Это может не повлиять на значения, если вы используете только ресурсы по умолчанию и отображение по умолчанию.