Odpowiedzi:
Będziesz musiał przekonwertować go z dps na piksele za pomocą współczynnika skali wyświetlania.
final float scale = getContext().getResources().getDisplayMetrics().density;
int pixels = (int) (dps * scale + 0.5f);
dp
do px
? Dzięki.
Wiem, że to stare pytanie, ale znalazłem o wiele lepszy sposób przeprowadzenia tej konwersji.
Jawa
TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 65, getResources().getDisplayMetrics());
Kotlin
TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 65f, resources.displayMetrics)
65
Powyżej jest wartością DP, które mają zostać zamienione na PX
Patrząc na twoje wymagania, istnieje również alternatywne rozwiązanie. Wygląda na to, że znasz wymiary w dp w czasie kompilacji, więc możesz dodać pozycję dimen do zasobów. Następnie możesz zapytać o wpis dimen, który zostanie automatycznie przekonwertowany na piksele w tym wywołaniu:
final float inPixels= mActivity.getResources().getDimension(R.dimen.dimen_entry_in_dp);
A twój dimens.xml będzie miał:
<dimen name="dimen_entry_in_dp">72dp</dimen>
Rozszerzając ten pomysł, możesz po prostu zapisać wartość 1dp lub 1sp jako pozycję dimen i zapytać o wartość i użyć jej jako mnożnika. Stosując to podejście, izolujesz kod od matematyki i polegasz na bibliotece, aby wykonać obliczenia.
najprostszym sposobem (a nawet działa z interfejsu API 1), który został przetestowany jest:
getResources().getDimensionPixelSize(R.dimen.example_dimen);
Z dokumentacji:
Pobierz wymiar dla określonego identyfikatora zasobu, aby użyć go jako rozmiaru w surowych pikselach. Jest to to samo, co getDimension (int), z tym wyjątkiem, że zwrócona wartość jest konwertowana na liczby całkowite w celu użycia jej jako rozmiaru. Konwersja rozmiaru polega na zaokrągleniu wartości podstawowej i upewnieniu się, że niezerowa wartość podstawowa ma co najmniej jeden piksel.
Tak, zaokrągla wartość, ale nie jest bardzo zła (tylko nieparzyste wartości na urządzeniach hdpi i ldpi muszą dodać niewielką wartość, gdy ldpi nie jest bardzo powszechne) Przetestowałem na urządzeniu xxhdpi, które konwertuje 4dp na 16 (piksele) i to jest prawdziwe.