Bagaimana cara menentukan tata letak yang berbeda untuk orientasi potret dan lanskap?

142

Saya telah melihat referensi untuk dapat menentukan dua file xml layout terpisah untuk suatu aktivitas, satu untuk Portrait dan satu untuk Landscape. Saya belum pernah menemukan informasi tentang bagaimana melakukan itu. Bagaimana cara menentukan untuk setiap aktivitas file xml mana itu tata letak potret dan mana tata letak Lansekap?

Apakah mungkin untuk menentukan tata letak yang berbeda untuk ukuran layar yang berbeda? Jika demikian, bagaimana ini dilakukan?

Jay Askren
sumber

Jawaban:

203

Buat layout-landdirektori dan letakkan versi landscape dari file XML layout Anda di direktori itu.

Markus B
sumber
3
Apakah itu berarti semua aktivitas perlu mendefinisikan lanskap dan tampilan potret jika saya melakukan ini?
Jay Askren
20
Tidak, jika tidak ada definisi tata letak-lahan, gunakan saja tata letak XML di direktori tata letak standar.
Mark B
dalam kasus saya, layout-land tidak berfungsi ketika saya menggunakan, android: configChanges = "orientasi | keyboardHidden | screenSize"
Tushar Pandey
9
Hapus orientasi dari android: configChanges = "orientasi | keyboardHidden | screenSize"
Ushal Naidoo
60

Anda hanya perlu meletakkannya di folder terpisah dengan nama yang berbeda tergantung pada orientasi dan resolusi, perangkat akan secara otomatis memilih yang tepat untuk pengaturan layarnya.

Info lebih lanjut di sini:

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

di bawah "Kualifikasi direktori sumber daya untuk ukuran dan kepadatan layar"

Silvio Donnini
sumber
Hanya berfungsi untuk OS versi 1.6 atau lebih tinggi. Jika Anda ingin mendukung 1.5, Anda memerlukan tautan ini: developer.android.com/guide/practices/screens-support-1.5.html
Scott Biggs
2
@ Silvio Donnini - tautan tidak lagi memiliki informasi yang diperlukan.
itsaboutcode
2
@itsaboutcode Ya itu tidak: Turun ke "Menggunakan kualifikasi konfigurasi"
Danation
27

Untuk pecinta Mouse! Saya katakan klik kanan pada folder resources dan Add new resource file, dan dari kualifikasi yang tersedia pilih orientation:

masukkan deskripsi gambar di sini


Tapi Anda masih bisa melakukannya secara manual dengan mengatakan, menambahkan sub-folder "layout-land" ke

"Direktori-Proyek-Anda \ app \ src \ main \ res"

sejak saat itu file layout.xml apa pun di bawah sub-folder ini hanya akan berfungsi untuk mode landscape secara otomatis .

Gunakan "layout-port" untuk mode potret.

AmiNadimi
sumber
1
Ini berhasil untuk saya. Saya menambahkan file layout baru seperti yang diinstruksikan dengan nama yang sama dengan versi potret. Android Studio secara otomatis membuat folder untuk tata letak itu. Satu tata letak untuk potret dan lainnya untuk lanskap. Tata letak baru secara otomatis ditampilkan ketika memutar layar.
Smitty-Werben-Jager-Manjenson
23

Hanya pengingat:

Hapus orientationdari android:configChangesatribut untuk aktivitas dalam xmlfile manifes Anda jika Anda mendefinisikannya:

android:configChanges="orientation|screenLayout|screenSize"
Robin Qiu
sumber
1
bagaimana jika saya perlu memiliki android: configChanges = "orientasi | screenLayout | screenSize" di manifes saya, karena beberapa fragmen saya dapat berada dalam orientasi dan sebagian tidak, tetapi masih memerlukan tata letak terpisah untuk lanskap dan potret untuk fragmen yang dapat mengubah orientasi secara dinamis?
natansalda
9

Cara tercepat untuk Android Studio 3.xx dan Android Studio 4.xx

1. Buka tab desain tata letak aktivitas

2. Di bagian atas Anda harus menekan pada tombol orientasi untuk pratinjau, ada opsi untuk membuat tata letak lanskap (periksa gambar), folder baru akan dibuat sebagai file tata letak xml Anda untuk orientasi tertentu

masukkan deskripsi gambar di sini

Shid
sumber
4

Saya pikir cara termudah dalam versi Android terbaru adalah dengan masuk ke mode Desain XML (bukan Teks).

Kemudian dari menu, pilih opsi - Buat Variasi Lansekap. Ini akan membuat lanskap xml tanpa kerumitan dalam beberapa detik. Versi Android Studio terbaru memungkinkan Anda untuk membuat tampilan lansekap segera.

masukkan deskripsi gambar di sini

Saya harap ini berhasil untuk Anda.

Akanshi Srivastava
sumber
3

Buat direktori baru layout-land, lalu buat xmlfile dengan nama yang sama layout-landseperti layoutdirektori dan sejajarkan konten Anda untuk mode Lansekap.

Perhatikan bahwa id konten di keduanya xmlsama.

Shah Nouman
sumber
3

Baris terakhir di bawah ini adalah contoh untuk menerapkan dua quantifiers: lansekap dan layar lebar terkecil (600dp). Perbarui 600dp dengan yang Anda butuhkan.

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

Di atas berlaku untuk dimens juga

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

Metrik perangkat yang berguna: https://material.io/tools/devices/

pengusaha licik
sumber
2

Atau gunakan ini:

<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>
Raksasa
sumber
0
  1. Klik kanan folder res,
  2. Baru -> File Sumber Daya Android
  3. dalam kualifikasi yang tersedia, pilih Orientasi,
  4. tambahkan ke kualifikasi Terpilih
  5. dalam orientasi layar, pilih Lansekap
  6. tekan OK

Menggunakan Android Studio 3.4.1, tidak lagi membuat layout-landfolder . Ini akan membuat folder dan menyatukan dua file layout.

masukkan deskripsi gambar di sini

eos1d3
sumber
2
Salah. Anda tidak menggunakan mode tampilan folder (seperti "Project"). Anda mungkin menggunakan mode tampilan "Android", yang mengelompokkan file-file seperti di screenshot Anda di folder virtual, tetapi struktur folder sebenarnya masih seperti yang dijelaskan oleh setiap posting lainnya di sini.
monK_