Android: alternatywny układ XML dla trybu poziomego

126

Jak mogę mieć jeden układ dla poziomego i jeden dla pionowego? Chcę uzyskać dodatkową szerokość i zaoszczędzić miejsce w pionie, gdy użytkownik obróci telefon na bok.

Bryan Field
źródło

Odpowiedzi:

217

Domyślnie układy w programie /res/layoutsą stosowane zarówno w orientacji pionowej, jak i poziomej.

Jeśli masz na przykład

/res/layout/main.xml

możesz dodać nowy folder /res/layout-land, skopiować main.xmldo niego i dokonać niezbędnych zmian.

orientacja

Zobacz też http://www.androidpeople.com/android-portrait-amp-landscape-differeent-layouts i http://www.devx.com/wireless/Article/40792/1954, aby uzyskać więcej opcji.

marapet
źródło
1
czy muszę zachować nazwę layout-land lub jakiekolwiek inne słowo @marapet
Vamsi Pavan Mahesh
9
Nie możesz użyć innego słowa
Foo,
Mój obraz tła rozciąga się na krajobraz. Mam layout-land i drawable-land… wciąż się rozciąga… Próbowałem użyć tego samego obrazu, 9-patchowych obrazów, mdpi, hdpi n all… nadal problem się utrzymuje :(
Prabs,
co to za słowoportrait
dsdsdsdsd
@dsdsdsdsd według studia Android to layout-port
Gregzenegair
76

W aktualnej wersji Android Studio (v1.0.2) możesz po prostu dodać układ poziomy, klikając przycisk w edytorze wizualnym pokazanym na zrzucie ekranu poniżej. Wybierz „Utwórz odmianę krajobrazu”

Android Studio dodaje układ poziomy

Reefwing
źródło
Tyle że umieszcza nową kopię w layout-landfolderze. Masz jakiś pomysł, jak wywołać stamtąd układ? Nie można użyć R.layout.layout_name. Próbuję ręcznie skonfigurować własne układy po zmianie konfiguracji, dzięki.
Azurespot
2
@NoniA. Powinien wykrywać, kiedy telefon przełącza się w tryb poziomy i automatycznie dzwonić do tego z obszaru layoutu.
Distwo
43

Układy w / res / layout są stosowane zarówno w orientacji pionowej, jak i poziomej, chyba że określono inaczej. Załóżmy, że mamy /res/layout/home.xml dla naszej strony domowej i chcemy, aby wyglądała inaczej w 2 typach układu.

  1. utwórz folder / res / layout-land (tutaj zachowasz układy dostosowane do krajobrazu)
  2. skopiuj tam home.xml
  3. dokonaj niezbędnych zmian

Źródło

Dalmas
źródło
a co z „portretem”?
dsdsdsdsd
A co z nowymi kwalifikacjami <sw>?
Ruchir Baronia
6

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 utworzenia 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
2

Możesz pogrupować swój określony układ w odpowiedniej strukturze folderów w następujący sposób.

layout-land-target_version

to znaczy

layout-land-19 // cel KitKat

podobnie możesz tworzyć swoje układy.

Mam nadzieję, że to ci pomoże

Umanda
źródło
Dziękuję za odpowiedź, ale nie widzę, jak Twoja odpowiedź może pomóc, ponieważ na to pytanie została już udzielona odpowiedź. Może mógłbyś wyjaśnić korzyści płynące z -19przyrostka? Czy jest to w jakiś sposób pomocne?
Bryan Field,
0

Wkrótce spróbuję to wyjaśnić.

Po pierwsze, możesz zauważyć, że teraz powinieneś używać ConstraintLayout zgodnie z żądaniem Google (zobacz bibliotekę androix).

W przypadku projekcji studyjnej w systemie Android można zapewnić układy specyficzne dla ekranu, tworząc dodatkowe katalogi res / layout /. Po jednym dla każdej konfiguracji ekranu, która wymaga innego układu.

Oznacza to, że musisz użyć kwalifikatora katalogu w obu przypadkach:

  • Obsługa urządzeń z systemem Android
  • Tryb poziomy lub pionowy Androida

W rezultacie oto przykład:

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

Kwalifikatora można również używać w przypadku plików zasobów zasobów przy użyciu pliku dimens.xml.

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 ​​/ dimens.xml

<resources>
    <dimen name="grid_view_item_height">70dp</dimen>
</resources>

res / values-land / dimens.xml

<resources>
    <dimen name="grid_view_item_height">150dp</dimen>
</resources>

your_item_grid_or_list_layout.xml

<androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/constraintlayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content

    <ImageView
            android:id="@+id/image"
            android:layout_width="0dp"
            android:layout_height="@dimen/grid_view_item_height"
            android:layout_marginEnd="8dp"
            android:layout_marginStart="8dp"
            android:layout_marginTop="8dp"
            android:background="@drawable/border"
            android:src="@drawable/ic_menu_slideshow">

</androidx.constraintlayout.widget.ConstraintLayout>

Źródło: https://developer.android.com/training/multiscreen/screensizes

Zhar
źródło