Я делаю:
button.setLayoutParams(new GridView.LayoutParams(65, 65));
Согласно документам, единицами измерения ширины и высоты (как 65 выше) являются «пиксели». Как вы заставляете это быть независимыми от устройства пикселями, или "dp"?
Вам придется конвертировать его из dps в пиксели, используя масштабный коэффициент отображения.
final float scale = getContext().getResources().getDisplayMetrics().density;
int pixels = (int) (dps * scale + 0.5f);
dp
вpx
? Спасибо.Я знаю, что это старый вопрос, однако я нашел более аккуратный способ сделать это преобразование.
Ява
Котлин
источник
65
приведено значение DP, которое вы хотите преобразовать в PXГлядя на ваше требование, есть и альтернативное решение. Кажется, вы знаете измерения в dp во время компиляции, поэтому вы можете добавить запись измерения в ресурсы. Затем вы можете запросить запись измерения, и она будет автоматически преобразована в пиксели в этом вызове:
И ваши измерения. Xml будут иметь:
Расширяя эту идею, вы можете просто сохранить значение 1dp или 1sp в качестве записи измерения и запросить значение и использовать его в качестве множителя. Используя этот подход, вы изолируете код от математического материала и положитесь на библиотеку для выполнения вычислений.
источник
Простейший способ (и даже работающий с API 1), который проверен:
Из документации:
Да, это округляет значение, но это не очень плохо (просто в нечетных значениях на устройствах hdpi и ldpi нужно добавить небольшое значение, когда ldpi не очень распространено) Я протестировал на устройстве xxhdpi, которое конвертирует 4dp в 16 (пикселей), и это правда.
источник