Android: xml เลย์เอาต์ทางเลือกสำหรับโหมดแนวนอน


126

ฉันจะมีเลย์เอาต์เดียวสำหรับแนวนอนและอีกแบบสำหรับแนวตั้งได้อย่างไร ฉันต้องการใช้ความกว้างพิเศษและประหยัดพื้นที่แนวตั้งเมื่อผู้ใช้หมุนโทรศัพท์ไปด้านข้าง

คำตอบ:


217

โดยค่าเริ่มต้นเค้าโครงใน/res/layoutจะใช้กับทั้งแนวตั้งและแนวนอน

ถ้าคุณมีเช่น

/res/layout/main.xml

คุณสามารถเพิ่มโฟลเดอร์ใหม่/res/layout-landคัดลอกmain.xmlลงในโฟลเดอร์และทำการปรับเปลี่ยนที่จำเป็น

ปฐมนิเทศ

ดูhttp://www.androidpeople.com/android-portrait-amp-landscape-differeent-layoutsและhttp://www.devx.com/wireless/Article/40792/1954สำหรับตัวเลือกเพิ่มเติม


1
ฉันควรจะเก็บชื่อlayout-landหรือคำอื่น ๆ ไว้ @marapet
Vamsi Pavan Mahesh

9
คุณไม่สามารถใช้คำอื่นได้
Foo

ภาพพื้นหลังของฉันขยายออกไปในแนวนอนฉันมี Layout-land และ drawable-land .. แต่มันก็ยังขยายออกไป .. ฉันได้ลองใช้ภาพเดียวกันภาพ 9-patch, mdpi, hdpi n all แล้ว .. ปัญหายังคงมีอยู่ :(
สรรเสริญ

คำว่าอะไรportrait
dsdsdsdsd

@dsdsdsdsd ตามสตูดิโอ Android มันคือเลย์เอาต์พอร์ต
Gregzenegair

76

ใน Android Studio เวอร์ชันปัจจุบัน (v1.0.2) คุณสามารถเพิ่มเค้าโครงแนวนอนได้โดยคลิกที่ปุ่มในโปรแกรมแก้ไขภาพที่แสดงในภาพหน้าจอด้านล่าง เลือก "สร้างรูปแบบภูมิทัศน์"

Android Studio เพิ่มเค้าโครงแนวนอน


ยกเว้นจะใส่สำเนาใหม่ในlayout-landโฟลเดอร์ของคุณ มีความคิดอย่างไรที่จะเรียกเค้าโครงจากที่นั่น? ใช้ไม่ได้R.layout.layout_name. ฉันกำลังพยายามกำหนดค่าเลย์เอาต์ของตัวเองด้วยตนเองเมื่อมีการเปลี่ยนแปลงการกำหนดค่าขอบคุณ
Azurespot

2
@NoniA ควรตรวจจับเมื่อโทรศัพท์เปลี่ยนเป็นแนวนอนและโทรจากเค้าโครงที่ดินโดยอัตโนมัติ
Distwo

43

เค้าโครงใน / res / เค้าโครงใช้กับทั้งแนวตั้งและแนวนอนเว้นแต่คุณจะระบุเป็นอย่างอื่น สมมติว่าเรามี /res/layout/home.xml สำหรับหน้าแรกของเราและเราต้องการให้มันดูแตกต่างกันในรูปแบบ 2 ประเภท

  1. สร้างโฟลเดอร์ / res / layout-land (ที่นี่คุณจะปรับเค้าโครงแนวนอนของคุณไว้)
  2. คัดลอก home.xml ที่นั่น
  3. ทำการเปลี่ยนแปลงที่จำเป็น

แหล่ง


แล้ว "แนวตั้ง" ล่ะ?
dsdsdsdsd

แล้วรอบคัดเลือก <sw> ใหม่ล่ะ?
Ruchir Baronia

6

วิธีที่เร็วที่สุดสำหรับ Android Studio 3.xx และ Android Studio 4.xx

1. ไปที่แท็บออกแบบของเค้าโครงกิจกรรม

2. ที่ด้านบนคุณควรกดปุ่มปฐมนิเทศเพื่อดูตัวอย่างมีตัวเลือกในการสร้างเลย์เอาต์แนวนอน (ตรวจสอบภาพ) โฟลเดอร์ใหม่จะถูกสร้างเป็นไฟล์เลย์เอาต์ xml ของคุณสำหรับการวางแนวเฉพาะนั้น

ใส่คำอธิบายภาพที่นี่


2

คุณสามารถจัดกลุ่มเลย์เอาต์เฉพาะของคุณภายใต้โครงสร้างโฟลเดอร์ที่ถูกต้องดังนี้

เค้าโครงที่ดิน target_version

กล่าวคือ

layout-land-19 // เป้าหมาย KitKat

ในทำนองเดียวกันคุณสามารถสร้างเค้าโครงของคุณ

หวังว่านี่จะช่วยคุณได้


ขอบคุณสำหรับคำตอบ แต่ฉันไม่เห็นว่าคำตอบของคุณช่วยได้อย่างไรเพราะคำถามนี้ได้รับคำตอบแล้ว บางทีคุณอาจอธิบายประโยชน์ของ-19คำต่อท้าย? เป็นประโยชน์ในทางใด?
Bryan Field

0

ฉันจะพยายามอธิบายในไม่ช้า

ขั้นแรกคุณอาจสังเกตเห็นว่าตอนนี้คุณควรใช้ConstraintLayoutตามที่ Google ร้องขอ (ดูไลบรารี androix)

ใน projet android studio ของคุณคุณสามารถจัดเตรียมเค้าโครงเฉพาะหน้าจอได้โดยการสร้าง res / layout / directory เพิ่มเติม หนึ่งรายการสำหรับการกำหนดค่าหน้าจอแต่ละรายการที่ต้องการเค้าโครงที่แตกต่างกัน

ซึ่งหมายความว่าคุณต้องใช้คุณสมบัติไดเร็กทอรีในทั้งสองกรณี:

  • รองรับอุปกรณ์ Android
  • แนวนอนหรือแนวตั้งของ Android

ด้วยเหตุนี้จึงเป็นตัวอย่าง:

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

คุณยังสามารถใช้ qualifier กับไฟล์ ressources res โดยใช้ 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

ความละเอียด / ค่า / dimens.xml

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

ความละเอียด / ค่าที่ดิน / 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>

ที่มา: https://developer.android.com/training/multiscreen/screensizes

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.