2011-01-20 1 views
5

Я использовал блок pt в файлах XML. Теперь мне нужно установить ширину элемента во время выполнения. Как установить ширину по точкам, чтобы она была той же единицей, которую я использовал везде. Я предполагаю, что мне нужно будет умножать разрешение и dpi. Пример кода был бы лучше.Android: конвертировать точки в пиксели

+0

Пожалуйста, смотрите мой пост относительно преобразования точек в Пиксели http://systemdotrun.blogspot.co.uk/2014/09/whats-point-in-font-sizing.html? – Dori

ответ

10

Сначала вы должны действительно прочитать следующую углубленную статью из документации разработчика 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); 
+1

Почему во второй строке есть «+ 0.5f»? Магический номер в этом примере или нужно правильно преобразовать пиксели в dp? – C0deAttack

+3

Раунды до ближайшего целого, когда выражение преобразуется в целое. – Blrfl

+0

Blrfl вправе округлить до ближайшего целого. – Yahel

1

Вы можете использовать dip вместо pt

+1

Я использую pt вместо dip, потому что это имеет больше смысла для не-программистов. Если кто-нибудь спросит, насколько велика, что я могу сказать 12 очков, и они могут знать, что это такое. Если я скажу пиксели, они могут не понимать, что пиксели Android намного меньше, чем на ПК, и если я скажу о провалах, тогда они будут сталкиваться с новым словом. Все это в стороне. Могу ли я использовать dip во время выполнения? Могу ли я преобразовать pt в dip? –

+0

Что касается вашего провала во время выполнения. Да, вы можете, но вам нужно преобразовать пиксели в DP, умножив пиксели на коэффициент масштабирования экрана, который вы можете получить с помощью context(). GetResources(). GetDisplayMetrics(). – C0deAttack