Obsługując różne rozmiary (gęstości) ekranu w systemie Android, często koncentruje się na tworzeniu różnych układów dla każdego możliwego ekranu. TO ZNACZY
- ldpi
- mdpi
- hdpi
- xhdpi
- xxhdpi
- xxxhdpi
Zaprojektowałem układ ekranu xhdpi jako odniesienie i zdefiniowałem jego wymiary w dimens.xml . Teraz chcę wspierać go przy każdym możliwym rozmiarze ekranu. Jak mogę to zrobić?
O ile wiem, mogę użyć tego narzędzia, aby znaleźć odpowiedni plik dimens.xml dla innych rozmiarów ekranu i dodać go do mojego projektu. Czy to właściwy sposób, aby to zrobić w mojej sytuacji?
Kolejne pytanie, czy muszę utworzyć plik dimens.xml tylko dla powyższych wymiarów ekranu? Jeśli tak, to co jest w820dp
?
Dzięki za pomoc. Muszę obsługiwać tylko telefony (nie tablety ani inne urządzenia).
dimesn.xml
pliki dla różnych rozdzielczości.W820dp
jest coś, co obsługuje różne wersje Androida? Czy możesz też zasugerować jakiś poradnik dotyczący obsługi różnych ekranów w oparciu o dimens.xml?Odpowiedzi:
Musisz utworzyć folder Różne wartości dla różnych ekranów . Lubić
values-sw720dp 10.1” tablet 1280x800 mdpi values-sw600dp 7.0” tablet 1024x600 mdpi values-sw480dp 5.4” 480x854 mdpi values-sw480dp 5.1” 480x800 mdpi values-xxhdpi 5.5" 1080x1920 xxhdpi values-xxxhdpi 5.5" 1440x2560 xxxhdpi values-xhdpi 4.7” 1280x720 xhdpi values-xhdpi 4.65” 720x1280 xhdpi values-hdpi 4.0” 480x800 hdpi values-hdpi 3.7” 480x854 hdpi values-mdpi 3.2” 320x480 mdpi values-ldpi 3.4” 240x432 ldpi values-ldpi 3.3” 240x400 ldpi values-ldpi 2.7” 240x320 ldpi
Więcej informacji można znaleźć tutaj
Edytowane przez @humblerookie
Możesz skorzystać z wtyczki Android Studio o nazwie Dimenify, aby automatycznie generować wartości wymiarów dla innych grup pikseli w oparciu o niestandardowe współczynniki skali. Jest nadal w wersji beta, pamiętaj o powiadomieniu programisty o wszelkich napotkanych problemach / sugestiach.
źródło
Użyj skalowalnego DP
Chociaż utworzenie innego układu dla różnych rozmiarów ekranu jest teoretycznie dobrym pomysłem, dostosowanie go do wszystkich wymiarów ekranu i gęstości pikseli może być bardzo trudne . Posiadanie ponad 20 różnych
dimens.xml
plików, jak sugerują powyższe odpowiedzi, wcale nie jest łatwe w zarządzaniu.Jak używać:
Do użycia
sdp
:implementation 'com.intuit.sdp:sdp-android:1.0.5'
w twojejbuild.gradle
,Wymień żadnej
dp
wartości, takie jak50dp
z@dimen/50_sdp
tak:<TextView android:layout_width="@dimen/_50sdp" android:layout_height="@dimen/_50sdp" android:text="Hello World!" />
Jak to działa:
sdp
skaluje się z rozmiarem ekranu, ponieważ jest to zasadniczo ogromna lista różnychdimens.xml
dla każdej możliwejdp
wartości.Zobacz to w akcji:
Tutaj jest na trzech urządzeniach o bardzo różnych wymiarach ekranu i gęstościach:
Należy zauważyć, że
sdp
obliczenia jednostki rozmiaru obejmują pewne przybliżenia ze względu na pewne ograniczenia dotyczące wydajności i użyteczności.źródło
Chcemy zobaczyć zmiany wymaganego rozmiaru widoku na różnych ekranach.
Musimy utworzyć różne foldery wartości dla różnych ekranów i umieścić plik dimens.xml na podstawie gęstości ekranu.
Zrobiłem jeden TextView i zaobserwowałem zmiany, gdy zmieniłem dimens.xml w różnych folderach wartości.
Postępuj zgodnie z procesem
normal - xhdpi \ dimens.xml
Poniższe urządzenia mogą zmieniać rozmiary ekranów, gdy zmienimy normalny - xhdpi \ dimens.xml
Nexus 5X (5,2 "* 1080 * 1920: 420 dpi)
nexus 6P (5,7 cala * 1440 * 2560: 560 dpi)
nexus 6 (6,0 "* 1440 * 2560: 560 dpi)
nexus 5 (5,0 cala , 1080 1920: xxhdpi)
Nexus 4 (4,7 cala, 768 * 1280: xhdpi)
Galaxy Nexus (4,7 cala, 720 * 1280: xhdpi)
4,65 "720p (720 * 1280: xhdpi)
4,7 "WXGA (1280 * 720: Xhdpi)
Xlarge - xhdpi \ dimens.xml
Poniższe urządzenia mogą zmieniać rozmiary ekranów, gdy zmienimy Xlarge - xhdpi \ dimens.xml
nexus 9 (8,9 cala, 2048 * 1556: xhdpi)
Nexus 10 (10,1 ", 2560 * 1600: xhdpi)
duży - xhdpi \ dimens.xml
Poniższe urządzenia mogą zmieniać rozmiary ekranów, gdy zmienimy duży - xhdpi \ dimens.xml
Nexus 7 (7,0 ", 1200 * 1920: xhdpi)
nexus 7 (2012) (7,0 ", 800 * 1280: tvdpi)
Poniższe ekrany są widoczne w sekcji „Wyszukaj ogólne telefony i tablety”
duży - mdpi \ dimens.xml
Poniższe urządzenia mogą zmieniać rozmiary ekranów, gdy zmienimy duży - mdpi \ dimens.xml
5,1 "WVGA (480 * 800: mdpi)
5,4 "FWVGA (480 * 854: mdpi)
7,0 "WSVGA (tablet) (1024 * 600: mdpi)
normalny - hdpi \ dimens.xml
Poniższe urządzenia mogą zmieniać rozmiary ekranów, gdy zmienimy normalny - hdpi \ dimens.xml
nexus s (4,0 ", 480 * 800: hdpi)
Nexus One (3,7 cala, 480 * 800: HDpi)
small - ldpi \ dimens.xml
Poniższe urządzenia mogą zmieniać rozmiary ekranów, gdy zmieniamy small - ldpi \ dimens.xml
2,7-calowy suwak QVGA (240 * 320: ldpi)
2,7 cala QVGA (240 * 320: ldpi)
xlarge - mdpi \ dimens.xml
Poniższe urządzenia mogą zmieniać rozmiary ekranów, gdy zmienimy xlarge - mdpi \ dimens.xml
10,1 "WXGA (TABLET) (1280 * 800: MDPI)
normal - ldpi \ dimens.xml
Poniższe urządzenia mogą zmieniać rozmiary ekranów, gdy zmienimy normalny - ldpi \ dimens.xml
3,3 "WQVGA (240 * 400: LDPI)
3,4 "WQVGA (240 * 432: LDPI)
normalny - hdpi \ dimens.xml
Poniższe urządzenia mogą zmieniać rozmiary ekranów, gdy zmienimy normalny - hdpi \ dimens.xml
4,0 "WVGA (480 * 800: hdpi)
3,7 "WVGA (480 * 800: hdpi)
3,7-calowy suwak FWVGA (480 * 854: hdpi)
normal - mdpi \ dimens.xml
Poniższe urządzenia mogą zmieniać rozmiary ekranów, gdy zmienimy normalny - mdpi \ dimens.xml
3,2-calowy suwak HVGA (ADP1) (320 * 480: MDPI)
3,2 cala QVGA (ADP2) (320 * 480: MDPI)
źródło
values-normal-xhdpi
?Są fajne biblioteki, które zajmą się wszystkim i zmniejszą twój ból. Aby go użyć, po prostu dodaj dwie zależności w gradle:
implementation 'com.intuit.ssp:ssp-android:1.0.5' implementation 'com.intuit.sdp:sdp-android:1.0.5'
Następnie użyj w
dimens
ten sposób:android:layout_marginTop="@dimen/_80sdp"
źródło
Wgrałem prosty program java, który pobiera lokalizację twojego projektu i plik wymiarów, który chcesz jako dane wejściowe. Na tej podstawie wyprowadzi odpowiedni plik wymiarów w konsoli. Oto link do tego:
https://github.com/akeshwar/Dimens-for-different-screens-in-Android/blob/master/Main.java
Oto pełny kod odniesienia:
public class Main { /** * You can change your factors here. The current factors are in accordance with the official documentation. */ private static final double LDPI_FACTOR = 0.375; private static final double MDPI_FACTOR = 0.5; private static final double HDPI_FACTOR = 0.75; private static final double XHDPI_FACTOR = 1.0; private static final double XXHDPI_FACTOR = 1.5; private static final double XXXHDPI_FACTOR = 2.0; private static double factor; public static void main(String[] args) throws IOException { Scanner in = new Scanner(System.in); System.out.println("Enter the location of the project/module"); String projectPath = in.nextLine(); System.out.println("Which of the following dimension file do you want?\n1. ldpi \n2. mdpi \n3. hdpi \n4. xhdpi \n5. xxhdpi \n6. xxxhdpi"); int dimenType = in.nextInt(); switch (dimenType) { case 1: factor = LDPI_FACTOR; break; case 2: factor = MDPI_FACTOR; break; case 3: factor = HDPI_FACTOR; break; case 4: factor = XHDPI_FACTOR; break; case 5: factor = XXHDPI_FACTOR; break; case 6: factor = XXXHDPI_FACTOR; break; default: factor = 1.0; } //full path = "/home/akeshwar/android-sat-bothIncluded-notintegrated/code/tpr-5-5-9/princetonReview/src/main/res/values/dimens.xml" //location of the project or module = "/home/akeshwar/android-sat-bothIncluded-notintegrated/code/tpr-5-5-9/princetonReview/" /** * In case there is some I/O exception with the file, you can directly copy-paste the full path to the file here: */ String fullPath = projectPath + "/src/main/res/values/dimens.xml"; FileInputStream fstream = new FileInputStream(fullPath); BufferedReader br = new BufferedReader(new InputStreamReader(fstream)); String strLine; while ((strLine = br.readLine()) != null) { modifyLine(strLine); } br.close(); } private static void modifyLine(String line) { /** * Well, this is how I'm detecting if the line has some dimension value or not. */ if(line.contains("p</")) { int endIndex = line.indexOf("p</"); //since indexOf returns the first instance of the occurring string. And, the actual dimension would follow after the first ">" in the screen int begIndex = line.indexOf(">"); String prefix = line.substring(0, begIndex+1); String root = line.substring(begIndex+1, endIndex-1); String suffix = line.substring(endIndex-1,line.length()); /** * Now, we have the root. We can use it to create different dimensions. Root is simply the dimension number. */ double dimens = Double.parseDouble(root); dimens = dimens*factor*1000; dimens = (double)((int)dimens); dimens = dimens/1000; root = dimens + ""; System.out.println(prefix + " " + root + " " + suffix ); } System.out.println(line); } }
źródło
Musisz utworzyć inny
values
folder dla różnych ekranów i umieścićdimens.xml
plik według gęstości.1) values 2) values-hdpi (320x480 ,480x800) 3) values-large-hdpi (600x1024) 4) values-xlarge (720x1280 ,768x1280 ,800x1280 ,Nexus7 ,Nexus10) 5) values-sw480dp (5.1' WVGA screen) 6) values-xhdpi (Nexus4 , Galaxy Nexus)
źródło
ldpi
,mdpi
sposóbvalues-xxhdpi
o Nexusie 6?320x480
jest typowym mdpi . Więc umieść to wvalues
lub wvalues-mdpi
Możesz włożyć
dimens.xml
w1) wartości
2) wartości-hdpi
3) wartości-xhdpi
4) wartości-xxhdpi
I podaj różne rozmiary w
dimens.xml
odpowiednich folderach zgodnie z gęstością.źródło
W przypadku, gdy chcesz zobaczyć więcej: Oto Link do listy urządzeń (tablet, telefony, zegarki), w tym
watch
,chromebook
,windows
imac
. Tutaj możesz znaleźć gęstość, wymiary itp. Po prostu umieść to tutaj, jest to dobre źródło, jeśli używasz również emulatora.Jeśli klikniesz określony element, po prawej stronie pokaże się więcej szczegółów.
Ponieważ jest
Android
, napiszę o tym związany.~ Lepiej, jeśli zapiszesz kopię sieci. Aby wyświetlić to w trybie offline.
źródło
Android 3.2 wprowadza nowe podejście do rozmiarów ekranu, wszystkie liczby opisujące rozmiar ekranu są podane w jednostkach „dp”. Najczęściej możemy użyć
najmniejsza szerokość dp: najmniejsza szerokość dostępna dla układu aplikacji w jednostkach „dp”; jest to najmniejsza szerokość dp, jaką kiedykolwiek napotkasz przy dowolnym obrocie wyświetlacza.
Aby utworzyć jeden prawym przyciskiem myszy res >>> nowy >>> katalog zasobów Androida
Z okna Dostępne kwalifikatory przenieś najmniejszą szerokość ekranu do wybranych kwalifikatorów
W szerokości ekranu oknie po prostu wpisz wartość „dp” zaczynając od tego, czy chcesz, aby Android Studio używał tych wymiarów.
Następnie przejdź do widoku projektu , kliknij prawym przyciskiem myszy nowo utworzony katalog zasobów
nowy >>> Plik zasobów wartości wprowadź nową nazwę pliku dimens.xml i gotowe.
źródło