Android - Пазлы о конверсии между дп и пикселем
Я знаю, что это может быть глупый вопрос, но я действительно прошел через очень много материалов и ссылок, но все еще не совсем понял это. В разделе "Поддержка нескольких экранов" Android Develop Doc он вводит dp, например:
Плотно-независимый пиксель (dp)
Виртуальный пиксельный модуль, который следует использовать при определении макета пользовательского интерфейса, чтобы выражать размеры или положение макета независимым от плотности способом. Плотно-независимый пиксель эквивалентен одному физическому пикселю на экране с разрешением 160 точек на дюйм, который является базовой плотностью, принятой системой для экрана "средней" плотности. Во время выполнения система прозрачно обрабатывает любое масштабирование единиц измерения dp по мере необходимости на основе фактической плотности используемого экрана. Преобразование единиц dp в пиксели экрана очень просто: px = dp * (dpi / 160). Например, на экране с разрешением 240 dpi 1 dp равен 1,5 физических пикселей. Вы должны всегда использовать dp-единицы при определении пользовательского интерфейса вашего приложения, чтобы обеспечить правильное отображение вашего пользовательского интерфейса на экранах с различной плотностью.
По сути, я понимаю тот факт, что экран с более высоким разрешением на дюйм будет иметь больше пикселей на один физический дюйм, что означает, что на таком экране значение dp будет равно большему количеству физических пикселей (px).
Но согласно приведенному выше уравнению преобразования (жирным шрифтом) на экране с более высоким разрешением (например, на экране с разрешением 240 точек на дюйм), px = (240 / 160) * dp = 1,5dp. Похоже, это означает, что на экране с более высоким разрешением пиксель px будет больше dp. Это выглядит в противоречии с моим предыдущим пониманием.
Так что, пожалуйста, кто-нибудь может помочь мне разобраться в этом сложном вопросе. Большое спасибо, правда.
1 ответ
Вы смотрите на неправильное место в формуле. Чтобы увидеть сколько dp
равняется одному px
в разной плотности, давайте переставим формулу:
px = dp * (dpi/160)
dp = px / (dpi/160)
Теперь для 1px
в устройствах mdpi:
dp = 1 / (160/160) = 1dp
В устройствах hdpi:
dp = 1 / (240/160) = 0.666666667dp
Вы можете видеть, что 1px равен less
дп в устройствах с более высокой плотностью