View.setPadding akceptuje tylko w px, czy w ogóle istnieje możliwość setPadding w dp?


94

Funkcja Androida View.setPadding(int left, int top, int right, int bottom)akceptuje tylko wartości w px, ale chcę ustawić dopełnienie w dp. Czy można to obejść?

Odpowiedzi:


186

Prosto do kodu

    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
Cześć, mam pytanie. Czy ta formuła jest używana tylko do wypełnienia, czy do czegokolwiek innego? np. margines lub wymiar prostokąta?
emeraldhieu

4
To jest wzór na konwersję jednostek dp na jednostki pikseli . Możesz go używać wszędzie
Labeeb Panampullan,

2
Zakładam, że getResources()jest to funkcja dziedziczona przez działanie, ale próbuję użyć tych wierszy w niestandardowym adapterze widoku listy. Czy jest jakiś sposób, w jaki mogę to zrobić, jeśli nie mogę zadzwonić getResources()?
Mike Baxter

1
Z adaptera po prostu wykonaj getContext (). GetResources (). GetDisplayMetrics (). Density;
Steve G.,

4
Czy jest gdzieś wyjaśnienie „+ 0,5f”?
Xavier L.

100

Jeśli zdefiniujesz wymiar (w dp lub czymkolwiek) w pliku XML (co i tak jest lepsze, przynajmniej w większości przypadków), możesz uzyskać wartość piksela za pomocą tego kodu:

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

3

Jest lepszy sposób na programowe przekonwertowanie wartości na dp:

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

Następnie zastosuj się dpValuedo swojej metody, na przykład:setPadding(dpValue,dpValue,dpValue,dpValue);



0

Mam ten sam problem. Jedynym rozwiązaniem, które znalazłem (nie pomoże Ci to :)) jest ustawienie go w pliku Xml.

Jeśli możesz uzyskać gęstość z kodu, możesz użyć konwersji: „Konwersja jednostek zanurzenia na piksele ekranu jest prosta: piksele = spadki * (gęstość / 160)”. (z http://developer.android.com/guide/practices/screens_support.html )

Edycja: możesz uzyskać gęstość ekranu: http://developer.android.com/reference/android/util/DisplayMetrics.html#densityDpi

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.