View.setPadding принимает только в px, есть ли вообще установить setPadding в dp? - PullRequest
87 голосов
/ 25 ноября 2010

Функция Android View.setPadding(int left, int top, int right, int bottom) принимает значения только в пикселях, но я хочу установить отступ в dp. Есть ли способ обойти это?

Ответы [ 5 ]

175 голосов
/ 25 ноября 2010

Прямо к коду

    int padding_in_dp = 6;  // 6 dps
    final float scale = getResources().getDisplayMetrics().density;
    int padding_in_px = (int) (padding_in_dp * scale + 0.5f);
87 голосов
/ 16 января 2012

Если вы определяете измерение (в dp или как угодно) в файле XML (что лучше в любом случае, по крайней мере, в большинстве случаев), вы можете получить его значение в пикселях, используя этот код:

context.getResources().getDimensionPixelSize(R.dimen.your_dimension_name)
1 голос
/ 14 марта 2019

Существует лучший способ преобразовать значение в dp программно:

int value = 200;
int dpValue = (int) TypedValue.applyDimension(
            TypedValue.COMPLEX_UNIT_DIP,
            value,        
            context.getResources().getDisplayMetrics());

Затем применить dpValue к вашему методу, например: setPadding(dpValue,dpValue,dpValue,dpValue);

0 голосов
/ 25 ноября 2010

У меня такая же проблема.Единственное решение, которое я нашел (оно вам не очень поможет :)), это установить его в XML-файле.

Если вы можете получить плотность из кода, вы можете использовать преобразование:преобразование единиц измерения в пиксели на экране простое: пиксели = провалы * (плотность / 160). "(от http://developer.android.com/guide/practices/screens_support.html)

Редактировать: вы можете получить плотность экрана: http://developer.android.com/reference/android/util/DisplayMetrics.html#densityDpi

0 голосов
/ 25 ноября 2010

Вы можете рассчитать пиксели для определенного значения DPI: http://forum.xda -developers.com / showpost.php? P = 6284958 & postcount = 31

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...