Jak tworzyć układy dla kilku rozmiarów ekranu Androida?

Zrobiłem kilka badań na temat budowania układów, które działają na wiele rozmiarów ekranów i szukam wyjaśnienia.

Czy powszechną praktyką jest tworzenie osobnego pliku układu dla każdego z trzech rozmiarów ekranu (mały, średni, duży), czy można to osiągnąć łatwiejszą metodą?

Testowałem moje projekty na dużym ekranie i mimo, że używam DIPs (density independent pixels) do wypełniania, marginesów itp., nadal szoruje rzeczy, gdy oglądam na mniejszych ekranach. Czy powinienem projektować swoje projekty dla średnich ekranów, a następnie pozwolić Androidowi odpowiednio je skalować?

Nie jestem pewien, czy jest to dobre pytanie, czy nie, ale szukam, co jest powszechną praktyką projektowania dla wielu rozmiarów ekranu. Czym się zajmujesz?

Edit: oprócz tego, na przykład, powiedzmy, że mam przycisk, który jest 40dip powyżej dołu ekranu, powinienem dosłownie napisać 40dip, czy powinienem używać jakiegoś rodzaju Pixel math jak 40 * szerokość ekranu / blahblah lub coś tak, że skaluje się w zależności od rozmiaru ekranu użytkownika? Mam ograniczone doświadczenie z UIs...

Author: joepetrakovich, 2010-12-05

3 answers

Istnieją dwie osie do rozważenia, jeśli chodzi o rozmiar ekranu: rozmiar fizyczny i gęstość. Gęstość jest obsługiwana przez dostarczanie pomiarów w zanurzeniach i skalowanych zasobach, stosownie do potrzeb. Ale gęstość nie zawsze oznacza wielkość lub odwrotnie. Zobacz http://developer.android.com/guide/practices/screens_support.html aby uzyskać więcej informacji na temat mechaniki.

Nie jest powszechne lub zalecane, aby mieć różne układy oparte na każdym ekranie Rozdzielczość, które obsługujesz, ale jest całkowicie rozsądne projektowanie różnych układów dla różnych klas wielkości (małe, średnie, duże). Ekrany o różnych rozmiarach mogą korzystać z dodawania, usuwania lub zmiany położenia niektórych elementów nawigacji w zależności od aplikacji.

W ramach określonej klasy wielkości należy upewnić się, że układy tolerują odchylenia w dokładnej rozdzielczości ekranu. Jak zasugerował Falmarri, użyj względnych układów, wag i innych dostępnych narzędzi, aby twój układ rozciągał się z wdziękiem.

 14
Author: adamp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-05 20:50:53

Ogólną zasadą jest używanie pikseli niezależnych od gęstości (dips) dla definicji rozmiaru w układzie xmls - widzę, że już to robisz. W ten sposób mam tylko jedyny układ dla wszystkich urządzeń. Trzeba podzielić grafikę. Do tego używam 3 różnych drawable katalogów- 'drawable-ldpi', 'drawable-mdpi' i 'drawable-hdpi'. Dzieje się tak, aby obrazy miały ten sam rozmiar (powiedzmy w milimetrach) na różnych gęstościach ekranu (zakładając, że rozmiar ekranu jest taki sam - normalny, dla instancja) powinny być skalowane w następujący sposób:

  • drawable-hdpi: 150%
  • drawable-mdpi: 100%
  • drawable-ldpi: 75%

Prawdopodobnie to zła rada. Jednak, jeśli spojrzeć na Google Wykres rozmiarów i gęstości ekranu można zdecydować się nie inwestować dodatkowe wysiłki do dokładnego testowania dużych ekranów, ponieważ nie ma prawie żadnych takich urządzeń na rynku.

 3
Author: Vit Khudenko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-05 20:36:35

Nie tworzenie oddzielnych układów nie jest tak naprawdę powszechną praktyką. Tylko wtedy, gdy masz obrazy, których nie można rozciągnąć, jest to naprawdę zalecany sposób.

Rzeczy zawsze będą wyglądać trochę rozciągnięte / skompresowane podczas oglądania na urządzeniach z mniejszymi / większymi ekranami. To rodzaj definicji ekranu o innym rozmiarze. Powinieneś po prostu użyć układów względnych i pozwolić Androidowi kontrolować określone liczby pikseli.

 1
Author: Falmarri,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-05 20:20:37