Robię:
button.setLayoutParams(new GridView.LayoutParams(65, 65));
Według dokumentacji jednostkami szerokości i wysokości (obie powyżej 65) są „piksele”. Jak wymusić, aby były to piksele niezależne od urządzenia lub „dp”?
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
dopx
? Dzięki.Wiem, że to stare pytanie, ale znalazłem o wiele lepszy sposób przeprowadzenia tej konwersji.
Jawa
Kotlin
źródło
65
Powyżej jest wartością DP, które mają zostać zamienione na PXPatrzą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:
A twój dimens.xml będzie miał:
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.
źródło
najprostszym sposobem (a nawet działa z interfejsu API 1), który został przetestowany jest:
Z dokumentacji:
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.
źródło