View.setPadding приймає лише в пікселях, чи є взагалі setPadding у dp?


93

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

Відповіді:


184

Прямо до коду

    int padding_in_dp = 6;  // 6 dps
    final float scale = getResources().getDisplayMetrics().density;
    int padding_in_px = (int) (padding_in_dp * scale + 0.5f);

1
Привіт, у мене запитання. Ця формула використовується лише для прокладки чи чогось іншого? наприклад, поле або розмір прямокутника?
emeraldhieu

4
Це формула для перетворення одиниць dp в одиниці пікселя . Ви можете використовувати його де завгодно
Labeeb Panampullan

2
Я припускаю, що getResources()це функція, яка успадковується діяльністю, але я намагаюся використовувати ці рядки у спеціальному адаптері списку перегляду. Чи можу я це зробити, якщо не можу зателефонувати getResources()?
Mike Baxter

1
З вашого адаптера просто виконайте getContext (). GetResources (). GetDisplayMetrics (). Density;
Steve G.

4
Чи є десь пояснення для "+ 0,5f"?
Xavier L.

97

Якщо ви визначаєте розмірність (у dp або будь-якому іншому) у файлі XML (що в будь-якому випадку краще, принаймні в більшості випадків), ви можете отримати значення пікселя за допомогою цього коду:

context.getResources().getDimensionPixelSize(R.dimen.your_dimension_name)

3

Існує кращий спосіб програмного перетворення значення в dp:

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

Потім застосуйте dpValueдо свого методу, наприклад:setPadding(dpValue,dpValue,dpValue,dpValue);



0

У мене така сама проблема. Єдине рішення, яке я знайшов (воно вам насправді не допоможе :)) - це встановити його у файлі Xml.

Якщо ви можете отримати щільність із коду, ви можете скористатися перетворенням: "Перетворення одиниць занурення в пікселі екрану є простим: пікселі = провали * (щільність / 160)." (з http://developer.android.com/guide/practices/screens_support.html )

Змінити: ви можете отримати щільність екрану: http://developer.android.com/reference/android/util/DisplayMetrics.html#densityDpi

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.