Функция Android View.setPadding(int left, int top, int right, int bottom)
принимает значения только в пикселях, но я хочу установить отступы в dp. Есть ли способ обойти это?
Ответы:
Прямо в код
int padding_in_dp = 6; // 6 dps
final float scale = getResources().getDisplayMetrics().density;
int padding_in_px = (int) (padding_in_dp * scale + 0.5f);
getResources()
это функция, наследуемая действием, но я пытаюсь использовать эти строки в настраиваемом адаптере просмотра списка. Как я могу это сделать, если не могу позвонить getResources()
?
Если вы определяете размер (в dp или чем-то еще) в XML-файле (что в любом случае лучше, по крайней мере, в большинстве случаев), вы можете получить его значение в пикселях, используя этот код:
context.getResources().getDimensionPixelSize(R.dimen.your_dimension_name)
Есть лучший способ программно преобразовать значение в dp:
int value = 200;
int dpValue = (int) TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP,
value,
context.getResources().getDisplayMetrics());
Затем примените dpValue
к своему методу, например:setPadding(dpValue,dpValue,dpValue,dpValue);
Вы можете рассчитать количество пикселей для определенного значения DPI: http://forum.xda-developers.com/showpost.php?p=6284958&postcount=31
У меня такая же проблема. Единственное решение, которое я нашел (это вам не очень поможет :)), - это установить его в файле Xml.
Если вы можете получить плотность из кода, вы можете использовать преобразование: «Преобразование единиц падения в пиксели экрана простое: пиксели = падения * (плотность / 160)». (из http://developer.android.com/guide/practices/screens_support.html )
Изменить: вы можете получить плотность экрана: http://developer.android.com/reference/android/util/DisplayMetrics.html#de densityDpi