ฉันจะมีเลย์เอาต์เดียวสำหรับแนวนอนและอีกแบบสำหรับแนวตั้งได้อย่างไร ฉันต้องการใช้ความกว้างพิเศษและประหยัดพื้นที่แนวตั้งเมื่อผู้ใช้หมุนโทรศัพท์ไปด้านข้าง
ฉันจะมีเลย์เอาต์เดียวสำหรับแนวนอนและอีกแบบสำหรับแนวตั้งได้อย่างไร ฉันต้องการใช้ความกว้างพิเศษและประหยัดพื้นที่แนวตั้งเมื่อผู้ใช้หมุนโทรศัพท์ไปด้านข้าง
คำตอบ:
โดยค่าเริ่มต้นเค้าโครงใน/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สำหรับตัวเลือกเพิ่มเติม
portrait
ใน Android Studio เวอร์ชันปัจจุบัน (v1.0.2) คุณสามารถเพิ่มเค้าโครงแนวนอนได้โดยคลิกที่ปุ่มในโปรแกรมแก้ไขภาพที่แสดงในภาพหน้าจอด้านล่าง เลือก "สร้างรูปแบบภูมิทัศน์"
layout-land
โฟลเดอร์ของคุณ มีความคิดอย่างไรที่จะเรียกเค้าโครงจากที่นั่น? ใช้ไม่ได้R.layout.layout_name
. ฉันกำลังพยายามกำหนดค่าเลย์เอาต์ของตัวเองด้วยตนเองเมื่อมีการเปลี่ยนแปลงการกำหนดค่าขอบคุณ
เค้าโครงใน / res / เค้าโครงใช้กับทั้งแนวตั้งและแนวนอนเว้นแต่คุณจะระบุเป็นอย่างอื่น สมมติว่าเรามี /res/layout/home.xml สำหรับหน้าแรกของเราและเราต้องการให้มันดูแตกต่างกันในรูปแบบ 2 ประเภท
วิธีที่เร็วที่สุดสำหรับ Android Studio 3.xx และ Android Studio 4.xx
1. ไปที่แท็บออกแบบของเค้าโครงกิจกรรม
2. ที่ด้านบนคุณควรกดปุ่มปฐมนิเทศเพื่อดูตัวอย่างมีตัวเลือกในการสร้างเลย์เอาต์แนวนอน (ตรวจสอบภาพ) โฟลเดอร์ใหม่จะถูกสร้างเป็นไฟล์เลย์เอาต์ xml ของคุณสำหรับการวางแนวเฉพาะนั้น
คุณสามารถจัดกลุ่มเลย์เอาต์เฉพาะของคุณภายใต้โครงสร้างโฟลเดอร์ที่ถูกต้องดังนี้
เค้าโครงที่ดิน target_version
กล่าวคือ
layout-land-19 // เป้าหมาย KitKat
ในทำนองเดียวกันคุณสามารถสร้างเค้าโครงของคุณ
หวังว่านี่จะช่วยคุณได้
-19
คำต่อท้าย? เป็นประโยชน์ในทางใด?
ฉันจะพยายามอธิบายในไม่ช้า
ขั้นแรกคุณอาจสังเกตเห็นว่าตอนนี้คุณควรใช้ConstraintLayoutตามที่ Google ร้องขอ (ดูไลบรารี androix)
ใน projet android studio ของคุณคุณสามารถจัดเตรียมเค้าโครงเฉพาะหน้าจอได้โดยการสร้าง res / layout / directory เพิ่มเติม หนึ่งรายการสำหรับการกำหนดค่าหน้าจอแต่ละรายการที่ต้องการเค้าโครงที่แตกต่างกัน
ซึ่งหมายความว่าคุณต้องใช้คุณสมบัติไดเร็กทอรีในทั้งสองกรณี:
ด้วยเหตุนี้จึงเป็นตัวอย่าง:
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