Jak określić różne układy dla orientacji pionowej i poziomej?

142

Widziałem odniesienia do możliwości określenia dwóch oddzielnych plików XML układu dla działania, jednego dla portretu i jednego dla krajobrazu. Nie znalazłem jednak żadnych informacji, jak to zrobić. Jak określić dla każdego działania, który plik xml ma układ pionowy, a który układ poziomy?

Czy można również określić różne układy dla różnych rozmiarów ekranu? Jeśli tak, jak to się robi?

Jay Askren
źródło

Odpowiedzi:

203

Utwórz layout-landkatalog i umieść w nim poziomą wersję pliku XML układu.

Mark B.
źródło
3
Czy to oznacza, że ​​wszystkie działania muszą definiować zarówno widok krajobrazu, jak i portret, jeśli to zrobię?
Jay Askren
20
Nie, jeśli nie istnieje definicja obszaru layoutu, po prostu używa układu XML w katalogu układów standardowych.
Mark B
w moim przypadku obszar układu nie działa, gdy używam, android: configChanges = "orientacja | klawiaturaHidden | screenSize"
Tushar Pandey
9
Usuń orientację z Androida: configChanges = "orientacja | keyboardHidden | screenSize"
Ushal Naidoo
60

Wystarczy umieścić go w osobnych folderach o różnych nazwach w zależności od orientacji i rozdzielczości, urządzenie automatycznie wybierze właściwy dla swoich ustawień ekranu

Więcej informacji tutaj:

http://developer.android.com/guide/practices/screens_support.html

w sekcji „Kwalifikatory katalogu zasobów dla rozmiaru i gęstości ekranu”

Silvio Donnini
źródło
Działa tylko dla wersji systemu operacyjnego 1.6 lub nowszego. Jeśli chcesz wesprzeć 1.5, potrzebujesz tego linku: developer.android.com/guide/practices/screens-support-1.5.html
Scott Biggs
2
@Silvio Donnini - linki nie zawierają już wymaganych informacji.
itsaboutcode
2
@itsaboutcode Tak, tak: przejdź do
sekcji
26

Dla miłośników myszy! Mówię, kliknij prawym przyciskiem myszy folder zasobów i Add new resource file, iz Dostępne kwalifikatory wybierz orientation:

wprowadź opis obrazu tutaj


Ale nadal możesz to zrobić ręcznie, dodając do niego podfolder „layout-land”

„Katalog-Twojego-projektu \ aplikacja \ src \ main \ res”

od tego czasu każdy plik layout.xml w tym podfolderze będzie działał automatycznie tylko w trybie poziomym .

Użyj „layout-port” dla trybu portretowego.

AmiNadimi
źródło
1
To zadziałało dla mnie. Zgodnie z instrukcją dodałem nowy plik układu o tej samej nazwie, co wersja pionowa. Android Studio automatycznie utworzyło folder dla tego układu. Jeden układ dla portretu i inny dla krajobrazu. Nowy układ jest automatycznie wyświetlany podczas obracania ekranu.
Smitty-Werben-Jager-Manjenson
23

Tylko przypomnienie:

Usuń orientationz android:configChangesatrybutu dla działania w xmlpliku manifestu , jeśli zostało zdefiniowane:

android:configChanges="orientation|screenLayout|screenSize"
Robin Qiu
źródło
1
co, jeśli potrzebuję androida: configChanges = "orientacja | screenLayout | screenSize" w swoim manifeście, ponieważ niektóre z moich fragmentów mogą mieć obie orientacje, a inne nie, ale nadal potrzebuję oddzielnych układów poziomego i pionowego dla tych fragmentów, które może dynamicznie zmieniać orientację?
natansalda
9

Najszybszy sposób dla Android Studio 3.xx i Android Studio 4.xx

1.Przejdź do zakładki projektowania układu aktywności

2. Na górze należy nacisnąć przycisk orientacji dla podglądu, istnieje opcja stworzenia układu poziomego (obraz zaznaczenia), nowy folder zostanie utworzony jako plik układu xml dla tej konkretnej orientacji

wprowadź opis obrazu tutaj

Shid
źródło
4

Myślę, że najłatwiejszym sposobem w najnowszych wersjach Androida jest przejście do trybu projektowania XML (nie tekstu).

Następnie z menu wybierz opcję - Utwórz odmianę krajobrazu. Spowoduje to bezproblemowe utworzenie krajobrazu XML w ciągu kilku sekund. Najnowsza wersja Android Studio umożliwia natychmiastowe utworzenie widoku poziomego.

wprowadź opis obrazu tutaj

Mam nadzieję, że to działa dla Ciebie.

Akanshi Srivastava
źródło
3

Utwórz nowy katalog layout-land, a następnie utwórz xmlplik o takiej samej nazwie w layout-landjakim był layoutkatalog i wyrównaj w nim zawartość dla trybu poziomego.

Zauważ, że identyfikator treści w obu xmljest taki sam.

Nouman Shah
źródło
3

Ostatnia linia poniżej to przykład zastosowania dwóch kwantyfikatorów: poziomego i najmniejszego ekranu (600 dp). Zaktualizuj 600 dp tymi, których potrzebujesz.

res/layout/main_activity.xml                # For handsets
res/layout-land/main_activity.xml           # For handsets in landscape
res/layout-sw600dp/main_activity.xml        # For 7” tablets
res/layout-sw600dp-land/main_activity.xml   # For 7” tablets in landscape

Powyższe dotyczy również wymiarów

res/values/dimens.xml                # For handsets
res/values-land/dimens.xml           # For handsets in landscape
res/values-sw600dp/dimens.xml        # For 7” tablets
res/values-sw600dp-land/dimens.xml   # For 7” tablets in landscape

Przydatne dane dotyczące urządzeń: https://material.io/tools/devices/

manewrowy
źródło
2

Lub użyj tego:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
            android:scrollbars="vertical" 
            android:layout_height="wrap_content" 
            android:layout_width="fill_parent">

  <LinearLayout android:orientation="vertical"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent">

     <!-- Add your UI elements inside the inner most linear layout -->

  </LinearLayout>
</ScrollView>
Ogromny
źródło
0
  1. Kliknij prawym przyciskiem folder res,
  2. Nowy -> Plik zasobów Androida
  3. w Dostępne kwalifikatory wybierz Orientację,
  4. dodaj do wybranego kwalifikatora
  5. w orientacji ekranu wybierz opcję Pozioma
  6. wciśnij OK

Korzystając z Android Studio 3.4.1, nie tworzy już layout-landfolderu . Utworzy folder i umieści razem dwa pliki układu.

wprowadź opis obrazu tutaj

eos1d3
źródło
2
Błędny. Nie używasz trybu widoku folderów (np. „Projekt”). Prawdopodobnie używasz trybu widoku „Android”, który grupuje pliki, tak jak na zrzucie ekranu, w wirtualnych folderach, ale rzeczywista struktura folderów jest nadal taka, jak opisuje każdy inny post tutaj.
monK_