2011-11-24 22 views
36

Zajmuję się tworzeniem aplikacji na Androida i muszę obsługiwać wszystkie ekrany o różnych rozmiarach i gęstości. Stworzyłem więc inny folder dla układu: layout-small layout-large i layout.Jak obsługiwać inny rozmiar ekranu w Androidzie

Następnie utworzyłem inny folder dla obrazu: ldpi, mdpi i hdpi. We wszystkich możliwych do losowania folderach obraz musi mieć inny rozmiar, prawda? Pytam o to, bo mam telefon z ekranem o dużym i gęstym medium, pokazany obraz będzie mniejszy i nie weźmie właściwego rozmiaru?

+0

można znaleźć jakąś pomoc stąd http://stackoverflow.com/questions/16706076/font-size-and-images-for-different -devices/16910589 # 16910589 –

+0

możliwy duplikat [obsługa wielu ekranów w systemie Android] (http://stackoverflow.com/questions/7453982/multiple-screen-support-in-android) – arpit

Odpowiedz

58

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óżnych rysunków bitmapowych dla ekranów o małej, średniej, wysokiej i bardzo dużej 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ź mój SO answer.

+10

używanie różnych folderów dla układów takich jak layout-small jest przestarzałe z 3.2 –

+0

moje układy z layoutu-large i layout-xlarge nie są brane y – Vikky

+1

Czy powinniśmy dodać layout-xxlarge? – alicanbatur

3

Dostosowanie systemu Android dzięki niemu możesz umieścić osobny 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 po prostu umieść w jednym szufladowym folderze układ tylko dla niektórych zdjęć, które możesz zrobić również 9-plaster.

read here

trzeba pozwolenie w oczywisty dla wielu ekranie 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"/> 
+2
0

dodanie do @ud_an

nie jest to dobra praktyka, aby utworzyć różne foldery dla układów. Stwórz swój układ tak, aby działał dobrze z wszystkimi rozmiarami ekranu. Aby to osiągnąć, baw się atrybutami układu. Musisz tylko mieć różne obrazy dla typów hdpi, mdpi i ldpi. Reszta będzie zarządzana przez system operacyjny Android.

+0

Naprawdę? Moja stara aplikacja używała 'dp' do pomiarów w folderze layoutu, a przy większych rozdzielczościach wyglądała na głupią (małe przyciski, ogromny układ itp.), System operacyjny nie radził sobie z tym bardzo dobrze. Kod był dość stary, więc może zrobiłem coś nie tak. – Ricky

+1

możesz obsłużyć je wszystkie w jednym układzie bez używania 'dp', jeśli chcesz zminimalizować wysiłki związane z kodowaniem. Unikaj kodowania rozmiaru układów i ich dynamicznej zawartości. W przypadku małych przycisków, jak już wspomniałem, potrzebne są różne rysunki. Możesz do niego ponownie kodować różne układy lub sprawić, by układy działały we wszystkich rozmiarach. – Shafi

+0

Więcej informacji tutaj: https: //developer.android.com/training/multiscreen/screensizes.html – Shafi

0

można utworzyć bitmap dla highes rozdzielczości/wielkości aplikacja będzie działać i zmieniać je w kodzie (w czasie wykonywania)

sprawdzić ten artykuł http://nuvornapps-en.blogspot.com.es/

2

można dowiedzieć się od wymiarów ekran 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 tą metodą.

+0

Nawet blisko. Kiedyś próbowałem zbadać taką opcję ... Nie dostałbym 1920 x 1080, ale w zależności od orientacji takiej jak 1920 x 1036 lub jakikolwiek byłby mój pasek nawigacji. A w krajobrazie dostałbym na przykład 1080x986 ... Chciałbym, żeby było tak łatwo ... podobnie jak html i używanie starego stylu stołów buuut .... :( –

7

Możesz użyć jednostki rozmiaru sdp zamiast jednostki rozmiaru dp. Jednostka wielkości sdp jest zależna od wielkości ekranu i dlatego często jest preferowana do kierowania na wiele rozmiarów ekranu.

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

+1

niezły! sprawdź, dziękuję! – JackTurky

+0

działa świetnie. Obsługuje cały rozmiar ekranu. Dzięki :) –

4

Począwszy od wersji Androida 3.2 (poziom interfejsu API 13), grupy wielkości (foldery małe, normalne, duże, xlarge) są uznawane za nową technikę zarządzania rozmiarami ekranów na podstawie dostępnej szerokości ekranu.



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

1) Najmniejsza szerokość - Podstawowym wielkość ekranu, wskazane przez najkrótszy wymiar dostępny obszar ekranu.

Wartość kwalifikacyjna: sw'dp wartość'dp

Np. res/sw600dp/layout.xml -> będą używane 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 dp jednostek, w których zasoby powinny być używane.

Wartość kwalifikacyjna: w'dp wartość'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 dp jednostkach, z których należy korzystać z zasobów.

Wartość kwalifikacyjna: h'dp wartość'dp

Np. res/h600dp/layout.xml -> będą używane dla wszystkich ekranów, których wysokość jest większa lub równa 600dp.



Więc w końcu swoją strukturę folderów może wyglądać następująco:

res/layout/layout.xml -> dla słuchawek (mniejszy niż 600dp dostępna szerokość)
RES/layout-sw600dp/layout.xml -> na 7” tabletki (600dp szerokiej i większe)
res/layout-sw720dp/layout.xml -> 10” tabletek (720dp szerokich i większe)


aby uzyskać więcej informacji prosimy o zapoznanie się z oficjalnej dokumentacji:
https://developer.android.com/guide/practices/screens_support.html#DeclaringTabletLayouts

0

Brzmi to wzniosle, jeśli chodzi o obsługę wielu rozmiarów ekranu. Kolejne 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 

Chek Device szerokość i wysokość za pomocą wyświetlacza Metrics

Place/dowiedzieć się, który układ odpowiada za uzyskaną szerokość urządzenia.

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

Wszystko powinno być sprawdzone przed setContentView(). W przeciwnym razie narażasz się na kłopoty

 Configuration config = getResources().getConfiguration(); 

    Configuration config = getResources().getConfiguration(); 

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

W górze, i stworzyli tak wiele układów w celu dopasowania wielu ekranów, to wszystko zależy od ciebie , możesz lub nie. Możesz zobaczyć recenzje Sklepu Play z którego interfejsu API, Pliki do pobrania są wysokie .forma, którą musisz kontynuować.

Mam nadzieję, że to ci pomoże. Niewiele osób korzystało z bibliotek osób trzecich. Może to zmniejszyć Twoją pracę, ale to nie jest najlepsza praktyka. Przyzwyczaj się do najlepszych praktyk Androida.

Check This Out

+0

Stworzyłem wszystkie powyższe foldery (120dp-720dp) i właśnie skopiowałem swój układ w każdym z folderów. Czy to właściwy sposób, czy też powinienem edytować każdy inny układ w każdym innym folderze? – Johny

0

użycie SDP biblioteka, która jest zaopatrzona w github

Powiązane problemy