Jak obsługiwać różne rozmiary ekranu w Androidzie

Rozwijam aplikację na Androida i muszę obsługiwać różne rozmiary i gęstość ekranu. Dlatego utworzyłem inny folder dla layoutu: layout-small layout-large i layout.

Następnie utworzyłem inny folder dla image: ldpi, mdpi i hdpi. We wszystkich folderach z możliwością rysowania obraz musi mieć różny rozmiar prawda? Pytam o to, ponieważ mam telefon o dużym rozmiarze ekranu i średniej gęstości, pokazany obraz będzie mniejszy i nie przybiorą odpowiedniego rozmiaru?

Author: Reno, 2011-11-24

9 answers

Dla różnych rozmiarów ekranu poniżej znajduje się lista katalogów zasobów w aplikacji, która zapewnia różne projekty układów dla różnych rozmiarów ekranu i różne rysowania map bitowych dla ekranów o małej, średniej, wysokiej i bardzo wysokiej gęstości.

res/layout/my_layout.xml             // layout for normal screen size ("default")
res/layout-small/my_layout.xml       // layout for small screen size
res/layout-large/my_layout.xml       // layout for large screen size
res/layout-xlarge/my_layout.xml      // layout for extra large screen size
res/layout-xlarge-land/my_layout.xml // layout for extra large in landscape orientation

res/drawable-mdpi/my_icon.png        // bitmap for medium density
res/drawable-hdpi/my_icon.png        // bitmap for high density
res/drawable-xhdpi/my_icon.png       // bitmap for extra high density

Poniższy kod w manifeście obsługuje wszystkie dpis.

<supports-screens android:smallScreens="true" 
          android:normalScreens="true" 
          android:largeScreens="true"
          android:xlargeScreens="true"
          android:anyDensity="true" />

A także sprawdź moje więc odpowiedz .

 79
Author: Uttam,
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
2017-05-23 11:47:28

Począwszy od Androida 3.2 (poziom API 13), grupy rozmiarów (foldery małe, normalne, Duże, xlarge) są przestarzałe na rzecz nowej techniki zarządzania rozmiarami ekranu w oparciu o dostępną szerokość ekranu.



istnieją różne konfiguracje zasobów, które można określić na podstawie dostępnej przestrzeni dla układu:

1) najmniejsza szerokość - podstawowa wielkość ekranu wskazywana przez najkrótszy wymiar dostępnego ekranu miejsce.

Wartość kwalifikująca: SW 'DP value' DP

Np. res / sw600dp / layout.xml - > będzie używany dla wszystkich rozmiarów ekranu większych lub równych 600dp. Nie uwzględnia to orientacji urządzenia.


2) dostępna szerokość ekranu - określa minimalną dostępną szerokość w jednostkach dp, na której powinny być używane zasoby.

Wartość kwalifikująca: w 'DP value' DP

Np. res / w600dp / layout.xml - > będzie używany dla wszystkich ekranów, których szerokość jest większa lub równa 600dp.


3) dostępna wysokość ekranu - określa minimalną wysokość ekranu w jednostkach dp, na której powinny być używane zasoby.

Wartość kwalifikująca: H 'DP value' DP

Np. res / h600dp / układ.xml - > będzie używany dla wszystkich ekranów, których wysokość jest większa lub równa 600dp.



Więc na końcu struktura folderów może wyglądać tak:

res / layout / layout.xml- > dla słuchawek (dostępny mniejszy niż 600dp Szerokość)
res / layout-sw600dp / layout.xml - > dla tabletów 7" (600dp szeroki i większy)
res / layout-sw720dp / layout.xml- > dla tabletów 10" (720dp szeroki i większy)


Więcej informacji można znaleźć w oficjalnym documentation:
https://developer.android.com/guide/practices/screens_support.html#DeclaringTabletLayouts
 16
Author: Schwesi,
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
2016-11-01 12:13:59

Możesz użyć jednostki rozmiaru sdp zamiast jednostki rozmiaru dp. Jednostka rozmiaru sdp jest w stosunku do rozmiaru ekranu i dlatego jest często preferowana do kierowania wielu rozmiarów ekranu.

Używaj go ostrożnie! na przykład w większości przypadków nadal trzeba zaprojektować inny układ dla tabletów.

 11
Author: Elhanan Mishraky,
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
2015-09-02 06:51:03

[[3]}brzmi to wzniosle, jeśli chodzi o obsługę wielu rozmiarów ekranu.Następujące gves lepsze wyniki .

res/layout/layout-w120dp
res/layout/layout-w160dp
res/layout/layout-w240dp
res/layout/layout-w160dp
res/layout/layout-w320dp
res/layout/layout-w480dp
res/layout/layout-w600dp
res/layout/layout-w720dp

Sprawdź szerokość i Wysokość urządzenia za pomocą wskaźników wyświetlania

Umieść / dowiedz się, który układ pasuje do uzyskanej szerokości urządzenia .

let smallestScreenWidthDp="assume some value(Which will be derived from Display metrics)"

Wszystkie powinny być sprawdzane przed setcontentview ().W przeciwnym razie wpakujesz się w kłopoty

     Configuration config = getResources().getConfiguration();


        if (config.smallestScreenWidthDp >= 600) {
            setContentView(R.layout.layout-w600dp);
        } else {
            setContentView(R.layout.main_activity);
        }

Na górze, stworzyłem tak wiele układów, aby pasowały do wielu ekranów, to wszystko zależy od ciebie, możesz lub nie.Ty można zobaczyć recenzje Sklepu play, z którego API, pliki do pobrania są wysokie..formularz, który musisz kontynuować.

Mam nadzieję, że to wam pomoże.Niewielu korzystało z bibliotek stron trzecich,może to być ograniczenie pracy, ale to nie jest najlepsza praktyka. Przyzwyczajaj się do najlepszych praktyk Androida.

Zobacz To

 7
Author: Trinadh Koya,
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
2021-01-30 21:02:00

Użyj biblioteki sdp , która jest dostarczana w Github

 4
Author: Deep Adhia,
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
2020-08-01 05:42:43

Android dostosuj samodzielnie możesz umieścić oddzielny obraz dla innego folderu, jeśli chcesz używać różnych obrazów dla urządzeń o wysokiej rozdzielczości i innych urządzeń. W przeciwnym razie wystarczy umieścić w jednym drawable, layout folder tylko dla niektórych obrazów można zrobić 9-patch również.

Czytaj tutaj

Potrzebujesz uprawnień w manifeście dla wielu ekranów support link

<supports-screens android:resizeable=["true"| "false"]
                  android:smallScreens=["true" | "false"]
                  android:normalScreens=["true" | "false"]
                  android:largeScreens=["true" | "false"]
                  android:xlargeScreens=["true" | "false"]
                  android:anyDensity=["true" | "false"]
                  android:requiresSmallestWidthDp="integer"
                  android:compatibleWidthLimitDp="integer"
                  android:largestWidthLimitDp="integer"/>
 3
Author: ud_an,
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
2011-11-24 11:06:54

Możesz obliczyć wymiary ekranu dynamicznie

Display mDisplay= activity.getWindowManager().getDefaultDisplay();
int width= mDisplay.getWidth();
int Height= mDisplay.getHeight();

Układ można ustawić za pomocą szerokości i wysokości uzyskanej za pomocą tej metody.

 3
Author: Sathish,
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
2013-06-18 09:59:01

Dodawanie do @ud_an

Tworzenie różnych folderów dla układów nie jest dobrą praktyką. Stwórz swój układ tak, aby działał dobrze ze wszystkimi rozmiarami ekranu. Aby to osiągnąć, pobaw się atrybutami układu. Musisz mieć tylko różne obrazy dla typów hdpi, mdpi i ldpi. Reszta będzie zarządzana przez system operacyjny android.

 0
Author: Shafi,
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
2011-11-24 11:09:12

Możesz utworzyć bitmapy o wysokiej rozdzielczości / rozmiarze, które uruchomi Twoja aplikacja i zmienić ich rozmiar w kodzie (w czasie wykonywania)

Sprawdź ten artykuł http://nuvornapps-en.blogspot.com.es/

 0
Author: Nuvorn Apps,
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
2012-09-09 18:36:33