Android: понимание DPI и получение его с помощью кода?

Может ли кто-нибудь помочь, мне трудно получить DPI телефона мысленно (понимая его) и получить значение в коде :-)

Например, в нем указано, что плотность следующая (взято из документации по Android)

ldpi    Resources for low-density (ldpi) screens (~120dpi).
mdpi    Resources for medium-density (mdpi) screens (~160dpi). (This is the baseline density.)
hdpi    Resources for high-density (hdpi) screens (~240dpi).
xhdpi   Resources for extra high-density (xhdpi) screens (~320dpi).

но почему это указано только как ~ 240 точек на дюйм, т.е. одно значение? разве это не должен быть (например) мобильный телефон (samsung galaxy S2) с разрешением WVGA (800 x 480) (DPI), что означает символ ~?

Итак, возьмем простой пример 800 x 480 (dpi для Samsung Galaxy S2), как это преобразуется в одно из приведенных выше значений?

Интересно, может ли кто-нибудь помочь мне мысленно понять это.

Затем позже можно с помощью кода получить размер плотности, DPI (включая x и y) с помощью кода?

я немного растерялся


person Martin    schedule 28.05.2012    source источник
comment
Я знаю, что ~ означает примерно в целом, поэтому я думаю, что это примерное значение dpi.   -  person eric.itzhak    schedule 28.05.2012
comment
это означает, что такие значения, как 220 dpi (точек на дюйм) или 252 dpi, будут рассматриваться как hdpi. Различные устройства могут иметь разные значения. Например, дисплей HTC Sensation имеет значение 256 точек на дюйм, и когда приложение выбирает ресурсы, оно выбирает их из папки drawable-hdpi вашего проекта.   -  person mihail    schedule 28.05.2012
comment
Это может помочь blog.blundell-apps. ком/   -  person Blundell    schedule 05.06.2012


Ответы (1)


но почему это указано только как ~ 240 точек на дюйм, т.е. одно значение?

Чего вы ожидали?

что означает символ ~?

Как отметили комментаторы, это означает «приблизительно». На самом деле производители устройств будут выбирать, в какой корзине плотности они хотят, чтобы их устройства находились, как правило, на основе их тестирования с поведением реальных приложений. Как правило, они будут выбирать плотность, ближайшую к их фактической плотности экрана, но это не гарантируется.

Итак, возьмем простой пример 800 x 480 (dpi для Samsung Galaxy S2), как это преобразуется в одно из приведенных выше значений?

Вы не знаете. Разрешение — это не плотность. У меня может быть дисплей 800x480 с диагональю 1 мм, 1 см, 1 м или 1 км. В результате у каждого из них будет разная плотность экрана. Плотность измеряется в dpi = «точки» на дюйм = пиксели на дюйм.

Затем позже можно с помощью кода получить размер плотности, DPI (включая x и y) с помощью кода?

Да, из объекта DisplayMetrics.

person CommonsWare    schedule 28.05.2012