Jak uzyskać gęstość ekranu programowo w Androidzie?
Mam na myśli: jak znaleźć rozdzielczość ekranu bieżącego urządzenia?
android
dpi
screen-density
Praveen
źródło
źródło
getDisplayMetrics().xdpi
, co ma zwrócić rzeczywistą rozdzielczość urządzenia. Należy pamiętać, że ta wartość nie jest konsekwentnie ustawiana poprawnie na różnych urządzeniach przez producentów, więc po prostu nie można ich używać . Smutne, ale prawdziwe: informacje o rzeczywistej rozdzielczości nie są dostępne . Źródło: groups.google.com/d/msg/android-developers/g56jV0Hora0/…getResources().getDisplayMetrics().xdpi
igetResources().getDisplayMetrics().ydpi
zapewni rzeczywiste gęstości poziome i pionowe , które w większości przypadków są różne.Odpowiedzi:
Możesz uzyskać informacje na temat wyświetlania z struktury DisplayMetrics :
Chociaż system Android nie korzysta z bezpośredniego mapowania pikseli, wykorzystuje garść skwantyzowanych wartości pikseli niezależnych od gęstości, a następnie skaluje do rzeczywistego rozmiaru ekranu. Więc
metrics.densityDpi
nieruchomość będzie jednym z tychDENSITY_xxx
stałych (120
,160
,213
,240
,320
,480
lub640
dpi).Jeśli potrzebujesz rzeczywistą gęstość pikseli LCD (być może dla aplikacji OpenGL) można dostać go od
metrics.xdpi
imetrics.ydpi
właściwościach gęstości poziomym i pionowym odpowiednio.Jeśli celujesz w poziomy API wcześniejsze niż 4.
metrics.density
Właściwość jest zmiennoprzecinkowym współczynnikiem skalowania z gęstości odniesienia (160dpi). Tę samą podaną teraz wartośćmetrics.densityDpi
można obliczyćźródło
getWindowManager().getDefaultDisplay().getRealMetrics(metrics);
został on oficjalnie dodany w interfejsie API 17, ale zdziwiłem się, że działał poprawnie nawet na urządzeniu 4.0, którego wypróbowałem.Działa to również:
To da ci:
0,75 - ldpi
1.0 - mdpi
1,5 - hdpi
2.0 - xhdpi
3.0 - xxhdpi
4.0 - xxxhdpi
ref: gęstość
ref 2
źródło
WindowManager
(np. Wewnątrz modułu ładującego). Wystarczy pomnożyć przez 160tvdpi
. Aby uzyskać więcej informacji,tvdpi
zobacz tutajDziała to na poziomie API 4 i wyższym.
źródło
Odpowiedź Blundella jako metody statycznego pomocnika:
źródło
Spróbuj tego:
źródło
View
znacznie łatwiej (tam, gdzie jest to potrzebne!)Aby uzyskać dpi:
źródło
Oto stałe gęstości, źródło :
Oprócz standardowych gęstości istnieje 5 pośrednich. Biorąc pod uwagę ten fakt, poniższy kod będzie kompletnym działającym przykładem:
Alternatywnie można znaleźć stałe gęstości za pomocą
densityDpi
:źródło
Poniższa odpowiedź jest niewielkim ulepszeniem opartym na odpowiedzi qwertzguy.
źródło
Faktycznie, jeśli chcesz mieć rzeczywistą rozdzielczość ekranu, odpowiedź znajduje się gdzieś pomiędzy, jeśli pytasz o parametry wyświetlania:
gęstośćDpi * 160 poda wartości / sugestie, której gęstości należy użyć
jak określono w poprzednich postach
ale
dm.xdpi
nie zawsze zapewnia PRAWDZIWĄ rozdzielczość dpi danego wyświetlacza: Przykład:więc może rzeczywista rozdzielczość wyświetlacza powinna wynosić Gęstość * xdpi .. ale nie jestem pewien, czy jest to właściwy sposób!
źródło
To powinno pomóc w twojej aktywności ...
WYNIK :
źródło
źródło
Jeśli chcesz pobrać gęstość z usługi, działa ona w następujący sposób:
źródło
Powinieneś tego spróbować. Właśnie dodałem metodę, która znajdzie i pokaż Toast. W tej kategorii mieści się urządzenie.
http://www.androidwarriors.com/2016/01/how-to-find-different-devices-screen.html
źródło
To powinno działać.
źródło
Jeszcze jedna odpowiedź:
źródło
Inny sposób na załadowanie gęstości przez urządzenie:
Utwórz
values
foldery dla każdej gęstościDodaj zasób ciągu w odpowiednich
strings.xml
:Następnie po prostu weź zasób łańcucha, a będziesz mieć swoją gęstość:
Jeśli gęstość jest większa niż
XXXHDPI
, domyślnie będzie ustawiona naXXXHDPI
lub jeśli będzie niższa niżHDPI
domyślnie naMDPI
Pominąłem
LDPI
, ponieważ w moim przypadku użycia nie jest to konieczne.źródło
Spróbuj tego...
W kotlinie
Możesz zadzwonić,
println("density: ${determineScreenDensityCode()}")
a wynik będzieSystem.out: density: xxxhdpi
źródło
Korzystam z następującego kodu, aby uzyskać dostęp do DPI z modułów (nie trzeba mieć dostępu do obiektu kontekstu):
źródło
W Androidzie możesz uzyskać gęstość ekranu w następujący sposób:
A w Kotlinie tak:
Regularnie sprawdzaj, czy dodawane są nowe gęstości .
źródło