Я думал, что мы всегда можем использовать следующую формулу (объясняется здесь): px = dp * (dpi / 160)
Эту формулу всегда можно использовать для преобразования между пикселями и dp,Просто убедитесь, что вы используете DisplayMetrics.densityDpi в качестве значения для dpi в формуле.
Однако показания в этом вопросе, кажется, подчеркивают случай, когда указание размеров в dp делаетне гарантирует фиксированный воспринимаемый размер на устройствах.
Да, это правда, что определенный dp не гарантирует фиксированный воспринимаемый размер на устройствах.Тем не менее, он гарантирует одинаковый воспринимаемый размер на разных устройствах.Причина этого заключается в том, что на некоторых устройствах плотность Dpi (область плотности) отличается от физического dpi устройства.См. мой ответ на вопрос, который вы связали, для получения более подробной информации.
Отношение dp к пикселю будет изменяться в зависимости от плотности экрана, но не обязательно в прямой пропорции
Здесь я думаю, что они имеют в виду фактическую физическую плотность экрана, когда говорят «плотность экрана», а не то, к какой плотности принадлежит телефон.
Например, устройство с физическим dpi270 будет принадлежать «высокой» (240) области плотности и иметь отношение dp к пикселям 240/160 = 1,5
. Другое устройство с физическим dpi 290 будет принадлежать «xhigh» (320) плотности и имеют отношение dp к пикселям 320/160 = 2
. При сравнении этих устройств физическая плотность экрана увеличилась на 7% (270 -> 290), в то время какСоотношение dp-to-pixel увеличилось на 33% (1,5 -> 2), поэтому они не являются прямой пропорцией между ними.
Нужно ли использовать мм, чтобы быть уверенным, чтобы сохранить то же самоевоспринимаемый размер ??
ЕслиВажно, чтобы заранее заданный размер был как можно более одинаковым для устройств, которые вы должны использовать, мм или дюйм.Однако у этого есть некоторые недостатки, о которых я упоминал в связанном с вами вопросе.
Также важно помнить, что есть устройства, в которых единицы мм и дюймы сломаны, для получения дополнительной информации об этом см. Вопрос Почему Lint отображает предупреждение при использовании единиц измерения в (дюймах) или мм (миллиметрах)?