Я использовал блок pt
в файлах XML. Теперь мне нужно установить ширину элемента во время выполнения. Как установить ширину по точкам, чтобы она была той же единицей, которую я использовал везде. Я предполагаю, что мне нужно будет умножать разрешение и dpi. Пример кода был бы лучше.Android: конвертировать точки в пиксели
ответ
Сначала вы должны действительно прочитать следующую углубленную статью из документации разработчика Android:
http://developer.android.com/guide/practices/screens_support.html
прямо в центре вы обнаружите, под заголовком:
Не используйте жестко закодированные значения пикселей в вашем коде
// Convert the dps to pixels
final float scale = getContext().getResources().getDisplayMetrics().density;
mGestureThreshold = (int) (GESTURE_THRESHOLD_DP * scale + 0.5f);
Почему во второй строке есть «+ 0.5f»? Магический номер в этом примере или нужно правильно преобразовать пиксели в dp? – C0deAttack
Раунды до ближайшего целого, когда выражение преобразуется в целое. – Blrfl
Blrfl вправе округлить до ближайшего целого. – Yahel
Вы можете использовать dip
вместо pt
Я использую pt вместо dip, потому что это имеет больше смысла для не-программистов. Если кто-нибудь спросит, насколько велика, что я могу сказать 12 очков, и они могут знать, что это такое. Если я скажу пиксели, они могут не понимать, что пиксели Android намного меньше, чем на ПК, и если я скажу о провалах, тогда они будут сталкиваться с новым словом. Все это в стороне. Могу ли я использовать dip во время выполнения? Могу ли я преобразовать pt в dip? –
Что касается вашего провала во время выполнения. Да, вы можете, но вам нужно преобразовать пиксели в DP, умножив пиксели на коэффициент масштабирования экрана, который вы можете получить с помощью context(). GetResources(). GetDisplayMetrics(). – C0deAttack
Пожалуйста, смотрите мой пост относительно преобразования точек в Пиксели http://systemdotrun.blogspot.co.uk/2014/09/whats-point-in-font-sizing.html? – Dori