Application Skeleton เพื่อรองรับหลายหน้าจอ


94

อย่างที่เราทราบกันดีว่า Android มาพร้อมกับอุปกรณ์ต่างๆที่มีคุณสมบัติความละเอียดและขนาดหน้าจอที่แตกต่างกันดังนั้นในขณะที่พัฒนาแอปพลิเคชันที่รองรับหน้าจอหลายหน้าจอ (เล็กและใหญ่) มีอุปสรรคด้านขนาดและรูปแบบ

สิ่งนี้นำไปสู่การผสมผสานขนาดหน้าจอความละเอียดและ DPI ที่แตกต่างกันและสร้างความท้าทายในการออกแบบและพัฒนาสำหรับอุปกรณ์ Android ในขณะที่ผู้ผลิตรายอื่น (ไม่ใช่ Android) มีความละเอียดและ DPI ที่แตกต่างกัน แต่ก็มีขนาดหน้าจอเดียวกันและความละเอียดจะเป็นไปตามอัตราส่วนเดียวกัน ดังนั้นจึงสามารถสร้างรูปภาพให้เหมาะกับอุปกรณ์ที่ไม่ใช่ Android

คำถามของฉันคือมีขั้นตอนหรือสถาปัตยกรรมที่เหมาะสมที่ควรปฏิบัติตามเพื่อให้เป็นไปตามข้อกำหนดหรือไม่?

ป้อนคำอธิบายภาพที่นี่

จำไว้ว่าเรามีแท็บเล็ตที่มีขนาดและความละเอียดแตกต่างกัน

ฉันทราบว่านักพัฒนา Androidมีข้อมูลนี้ แต่มุมมองของฉันมาจากการนำไปใช้งาน

จากความรู้ของฉันสิ่งที่ฉันเข้าใจคือการออกแบบกราฟิก Android แม้แต่โปรแกรมเมอร์ก็ต้องรู้แนวคิดการออกแบบ


14
พวกคุณแน่ใจหรือว่าคำถามนี้ไม่สร้างสรรค์?
Mohammed Azharuddin Shaikh

6
ฉันคิดว่ามันสร้างสรรค์มาก อยากทราบเหตุผลของการโหวตลง.
Lazy Ninja

11
@MKJParekh ใช้MicroMax Funbook gsmarena.com/micromax_funbook_p300-4701.php 7", 480X800, Ldpi (133 dpi)ช่วยบอกหน่อยครับว่าหมวดไหน (drawble-large หรือ Ldpi หรือถ้า Android v3.0 sw-480) มันจะตก
Mohammed Azharuddin Shaikh

1
@LazyNinja เหตุผลของการโหวตลงคือคนบ้าและคนบ้า ใครคิดว่าสามารถถามคำถามเชิงสร้างสรรค์ได้เท่านั้น: p
AZ_

1
@AZ_ :) เราใช้โครงสร้าง res นี้ในโฟลเดอร์ res drawable drawable-hdpi drawable-hdpi-v11 drawable-hdpi-v9 drawable-large drawable-large-hdpi drawable-ldpi drawable-mdpi drawable-mdpi-v11 drawable-small drawable- xhdpi drawable-xhdpi-v11 drawable-xxhdpi drawable-xxhdpi-v11 layout layout-small layout-sw530dp layout-sw720dp layout-xlarge values ​​values-sw530dp values-sw720dp values-v14 values-xlarge และใช้ขนาดที่กำหนดไว้อย่างดีใน xml จากโฟลเดอร์ค่า . FYKI แอปพลิเคชันของเรารองรับอุปกรณ์มากกว่า 5k ประเภท
MKJParekh

คำตอบ:


147

ในที่สุดก็สร้างโครงสร้างที่จัดการเลย์เอาต์และไอคอนสำหรับหลายหน้าจอ

อุปกรณ์ทั่วไปของ Android แสดงเป็นหมวดหมู่ตามพารามิเตอร์สองตัว:

  • ขนาดหน้าจอขนาดจริงของจอแสดงผล (วัดตามแนวทแยงมุม)
  • ความหนาแน่นของหน้าจอความหนาแน่นของพิกเซลจริงของจอแสดงผล (เป็นพิกเซลต่อนิ้วหรือ ppi) "

หากต้องการกำหนดขนาดหน้าจอและความหนาแน่นอย่างรวดเร็วโปรดติดตั้งแอป " ขนาดเท่าไหร่ " สำหรับ Android

ขนาดหน้าจอ

Android กำหนดขนาดหน้าจอทั่วไปสี่ขนาด:


 Qualifier           Size

 small               ~3 inches (approx) 
 normal              ~4 inches (approx) 
 large               Exceeds 4 inches    
 xlarge              Exceeds 7 inches  
  • โทรศัพท์ส่วนใหญ่จัดว่ามีขนาดเล็กหรือปกติ (ประมาณ 3 ถึง 4 นิ้วตามแนวทแยงมุม) แต่ตอนนี้มีโทรศัพท์หลายรุ่นที่มีหน้าจอขนาดใหญ่เช่น Galaxy S4, HTC One, Xperia Z
  • แท็บเล็ตขนาดเล็กเช่น Samsung Galaxy Tab จัดอยู่ในประเภทที่มีขนาดใหญ่ (ใหญ่กว่า 4 นิ้ว)
  • ขนาดใหญ่พิเศษใช้กับอุปกรณ์ขนาดใหญ่เช่นแท็บเล็ตขนาดใหญ่

Android กำหนดความหนาแน่นของหน้าจอโดยทั่วไปสี่ประการ:


 Qualifier         Description         Nominal value

 ldpi              low density          120 ppi
 mdpi              medium density       160 ppi
 hdpi              high density         240 ppi
 xhdpi             extra high density   320 ppi

โดยปกติ:

  • ขนาดหน้าจอมีผลต่อเค้าโครงแอปของคุณมากที่สุด
  • ความหนาแน่นของหน้าจอมีผลต่อทรัพยากรรูปภาพและกราฟิกของคุณมากที่สุด

มันเป็นรายการที่นี่แตกต่างร้อยละของหน้าจอของอุปกรณ์

  • Ldpi - 75%
  • Mdpi- 100% (ฐานตามเว็บไซต์นักพัฒนา Android)
  • Hdpi - 150%
  • XHdpi - 200%

ป้อนคำอธิบายภาพที่นี่

แต่อย่างที่เราทราบกันดีว่าตอนนี้อุปกรณ์ส่วนใหญ่มาพร้อม480X800ดังนั้นฉันจึงถือว่านี่เป็นอุปกรณ์พื้นฐานดังนั้นการคำนวณใหม่ของเราจะเป็นเช่นนี้

  • Ldpi - 50%
  • Mdpi - 66.67%
  • Hdpi - 100%
  • XHdpi - 133.33%

ซึ่งหมายความว่าไอคอนแรกและการออกแบบจะถูกสร้างขึ้นสำหรับ480X800เท่านั้นจากนั้นสำหรับไอคอนที่เหลือ (เช่น Ldpi, Mdpi, Xhdpi)

มีรูปภาพที่ใช้กันทั่วไปสำหรับการจัดวางทั้งหมดและต้องมีสีและรูปร่างสม่ำเสมอกัน (ไม่มีรูปร่างที่ซับซ้อนไม่มีเส้นโค้ง) ดังนั้นสำหรับภาพประเภทนี้เรากำลังสร้าง9patchซึ่งจะใส่ไว้ในโฟลเดอร์ "drawable (ไม่มีคำต่อท้าย)" ในการสร้างภาพ 9Patch คุณสามารถใช้DrawNinePatchหรือBetterNinePatch

ตอนนี้เพียงแค่เปลี่ยนชื่อรูปภาพของคุณตามมาตรฐานของ Android และกรอกแอปพลิเคชันของคุณด้วยhdpiจากนั้นใช้drawable-hdpiโฟลเดอร์และเปิดAdode Photoshop (แนะนำ) สร้างActionของหลายขนาด (เพียงแค่เปลี่ยนขนาดตามอัตราส่วนเปอร์เซ็นต์) เมื่อ Action สร้างขึ้นสำหรับทุกขนาดแล้วก็ทำBatch Automateและให้ต้นทาง (drawable-hdpi) และปลายทาง (drawable-ldpi, drawable-mdpi, drawable-xdpi)

เหตุผลที่ฉันยืนยันให้คุณใช้ Photoshop เพราะมันจะปรับขนาดภาพของคุณโดยอัตโนมัติด้วย Actions และข้อดีอีกอย่างหนึ่งคือคุณไม่จำเป็นต้องเปลี่ยนชื่อไฟล์ (มันจะกำหนดชื่อเดียวกันกับไฟล์ต้นฉบับ)

เมื่อคุณสร้างภาพทั้งหมดเสร็จแล้วให้รีเฟรชโปรเจ็กต์ของคุณและทดสอบ

บางครั้งอาจมีความเป็นไปได้ที่เค้าโครงที่รองรับหน้าจอ (xhdpi, hdpi, mdpi) อาจถูกตัดในหน้าจอขนาดเล็ก (ldpi) ดังนั้นสำหรับการจัดการสิ่งนี้เพียงแค่สร้างโฟลเดอร์ Layout แยกต่างหาก (เค้าโครงขนาดเล็ก) สำหรับมันและเพิ่มScrollView(ส่วนใหญ่) แค่นั้นแหละ.

แท็บเล็ตแท็บเล็ ตแบ่งออกเป็นสองขนาด

  1. 7 "(1024X (600-48 (แถบนำทาง))) = 1024X552 (ขนาดใหญ่ที่วาดได้)
  2. 10 "(1280X (800-48 (แถบนำทาง))) = 1280X752 (drawable-xlarge)

ในการนี้เราต้องสร้างภาพสำหรับทั้งหน้าจอและวางตามนั้น

ดังนั้นโดยรวมแล้วเราจะมีโฟลเดอร์นี้ในแอปพลิเคชันของเราเพื่อรองรับหลายหน้าจอ

drawable
drawable-ldpi
drawable-mdpi
drawable-hdpi
drawable-xhdpi
drawable-large
drawable-xlarge

จะมีคุณสมบัติมากขึ้นรวมกับ Screen size and Screen density

drawable-large-ldpi
drawable-large-mdpi
drawable-large-hdpi
drawable-large-xhdpi

รอบคัดเลือกมากขึ้นด้วย Screen density and Version

drawable-ldpi-v11
drawable-mdpi-v11
drawable-hdpi-v11
drawable-xhdpi-v11

และคุณสมบัติอื่น ๆ ด้วย Screen size and Version

drawable-large-v11
drawable-xlarge-v11

และคุณสมบัติอื่น ๆ ด้วย Smallest width concept(SW)

 drawable-sw???dp

ยิ่งไปกว่านั้นใน Android V3.0 Honeycomb พวกเขาได้นำเสนอแนวคิดใหม่SW(smallest width)ในการจัดหมวดหมู่อุปกรณ์ตามความกว้างของหน้าจอดังนั้นหากเราสร้างโฟลเดอร์ที่มีชื่อdrawable-sw360dpอุปกรณ์ที่มี 720dp (ทั้งความกว้างหรือความสูง) จะใช้ทรัพยากรจากโฟลเดอร์นี้

ตัวอย่างเช่นในการค้นหาSamsung Galaxy S3 dp to ต่อท้ายเพื่อdrawable-sw? dp
ด้วยการอ้างอิงของการคำนวณ DPหากคุณต้องการสนับสนุนเค้าโครงของคุณหรือวาดได้ไปยัง S3 การคำนวณจะบอกว่า

px = ความกว้างของอุปกรณ์ = 720
dpi = ความหนาแน่นของอุปกรณ์ = 320

สูตรที่กำหนด

    px = dp * (dpi / 160)

สูตรแลกเปลี่ยนกันเพราะเรามีค่าของ px

    dp = px / (dpi / 160)

ตอนนี้ใส่คุณค่า

     dp= 720 / (320/160);
     dp=360. 

ดังนั้นdrawable-sw360dpจะทำงาน

ให้คุณกำหนดค่าอุปกรณ์จากGsmArena Sameway คุณยังสามารถสร้างโฟลเดอร์ตามเวอร์ชัน Android API ของอุปกรณ์เช่น drawable-hdpi-v11` ดังนั้นอุปกรณ์ที่มี API11 และเป็น Hdpi ก็จะใช้ทรัพยากรนี้

เคล็ดลับเพิ่มเติม:

  • ใช้เลย์เอาต์ที่สัมพันธ์กัน dp, sp และ mm

    หน่วย dp - พิกเซลอิสระของอุปกรณ์ที่ปรับให้เป็นพิกเซลทางกายภาพ 1 พิกเซลบนหน้าจอ 160 ppi คือความหนาแน่นปานกลาง ปรับขนาดที่รันไทม์ ใช้สำหรับขนาดองค์ประกอบหน้าจอ

    หน่วย sp - พิกเซลที่ปรับขนาดซึ่งระบุเป็นค่าทศนิยมตามหน่วย dp แต่ปรับขนาดเพิ่มเติมสำหรับการตั้งค่าขนาดแบบอักษรของผู้ใช้ ปรับขนาดที่รันไทม์ ใช้สำหรับขนาดตัวอักษร

    คุณควรใช้ RelativeLayout สำหรับเลย์เอาต์เสมอ AbsoluteLayout เลิกใช้งานแล้วและไม่ควรใช้

  • ใช้รูปแบบภาพที่เหมาะสม - PNG เทียบกับ JPEG

    Android "prefers" PNG for bitmap image files, "accepts" JPEG, and "discourages" GIF.

    อย่างไรก็ตาม PNG และ JPEG ไม่เทียบเท่ากัน พวกเขามีการแลกเปลี่ยนคุณภาพที่แตกต่างกันและ PNG ไม่ได้ดีที่สุดเสมอไป:

    JPEGสามารถลดขนาดไฟล์ได้ถึง 50% เมื่อเทียบกับ PNG ซึ่งสำคัญมากหากแอปของคุณใช้ภาพมาก

    JPEG "lossy" คุณภาพสูงกว่าอาจดูดีกว่า PNG "lossless" ที่บีบอัดสูงสำหรับขนาดไฟล์เดียวกัน

  • เพิ่มป้ายกำกับให้กับรูปภาพและกราฟิกของคุณสำหรับการดีบัก

  • ใช้องค์ประกอบรองรับหน้าจอ

  • กำหนดค่าอีมูเลเตอร์ของคุณด้วยค่าอุปกรณ์จริง

    ตามปกติแล้วระบบเดสก์ท็อปจะแสดงที่ 72ppi (Mac) หรือ 96ppi (Windows, Linux) เมื่อเทียบกับมือถือแล้วหน้าจอเดสก์ท็อปมักมีความหนาแน่นต่ำ

    กำหนดค่าตัวเลียนแบบ Android ของคุณให้เลียนแบบค่าอุปกรณ์จริงเสมอและตั้งค่าให้ปรับขนาดเพื่อจำลองความหนาแน่นของอุปกรณ์

    ใน Eclipse คุณสามารถสร้างอีมูเลเตอร์หลายตัวได้อย่างง่ายดาย (จากแถบเมนู Eclipse เลือกWindow> AVD Manager> New ) ที่กำหนดค่าด้วยค่าสำหรับอุปกรณ์จริง:

    ตั้งชื่อโปรแกรมจำลองสำหรับอุปกรณ์จริงที่จำลองการระบุความละเอียดอย่าใช้ขนาดทั่วไปในตัวตั้งค่าความหนาแน่นของอุปกรณ์ให้ตรงกับอุปกรณ์จริง (ในบานหน้าต่างฮาร์ดแวร์ตั้งค่าคุณสมบัติ LCD แบบนามธรรมเป็นความหนาแน่นจริงโดยจะเป็นค่าจำนวนเต็มเสมอ)

    เมื่อคุณเปิดอุปกรณ์ให้เลือกปรับขนาดการแสดงผลเป็นขนาดจริงเสมอและพิมพ์ขนาดหน้าจอจริงเป็นนิ้ว

    หากคุณไม่ได้ตั้งค่าความหนาแน่นของอุปกรณ์โปรแกรมจำลองจะตั้งค่าเริ่มต้นเป็นความหนาแน่นต่ำและจะโหลดทรัพยากรเฉพาะ ldpi เสมอ ความละเอียด (ขนาดพิกเซล) จะถูกต้อง แต่ทรัพยากรรูปภาพที่ขึ้นอยู่กับความหนาแน่นของคุณจะไม่แสดงตามที่ต้องการ

    แน่นอนว่าคุณไม่ทำอะไรเลยที่จะสร้างคุณภาพของภาพที่มีความหนาแน่นสูงขึ้นบนหน้าจอเดสก์ท็อปที่มีความหนาแน่นต่ำกว่า

นี่คือข้อมูลที่รวบรวมในช่วง 7 วันซึ่งสิ้นสุดในวันที่ 1 ตุลาคม 2555 หากต้องการดูสถิติล่าสุดเกี่ยวกับเวอร์ชันแพลตฟอร์ม Android ไปที่นี่

ขึ้นอยู่กับขนาดหน้าจอ

ป้อนคำอธิบายภาพที่นี่

ขึ้นอยู่กับความหนาแน่นของหน้าจอ

ป้อนคำอธิบายภาพที่นี่


2
สำหรับ samsung galaxy tab 7 "เราต้องเก็บภาพภายใต้ drawable-large-hdpi มิฉะนั้นภาพจะยืดหรือ
หด

@rajpara มีการผสมผสานและการเปลี่ยนแปลงจำนวนมากเราจะรวมกรณีดังกล่าวทั้งหมดในภายหลัง
Mohammed Azharuddin Shaikh

1
ดู @AlexBonel ฉันเห็นด้วยกับคุณ แต่คำขวัญหลักของฉันคือการทำให้รู้ว่าสิ่งต่างๆสามารถทำได้เมื่อพูดถึงการสนับสนุนหลายหน้าจอ เราสามารถปรับเปลี่ยน / จัดการโฟลว์ / แนวคิดนี้ได้เนื่องจากข้างต้นมีไว้เพื่อทำให้ปัญหาเริ่มต้นชัดเจนขึ้น นอกจากนี้ฉันยังทำการปรับเปลี่ยนตามการออกแบบแอปพลิเคชันด้วย โพสต์ของคุณทำให้ฉันรู้สึกว่าคุณเข้าใจแนวคิดนี้ หวังว่าคุณจะเข้าใจประเด็นของฉัน
Mohammed Azharuddin Shaikh

1
คำตอบที่ดี หลังจากค้นหามาหลายวันแล้วว่าทำไมถึงเกิดข้อยกเว้นนี้ขึ้นฉันได้รับโพสต์นี้เป็นคำตอบที่ดีที่สุดพร้อมตัวอย่างและคำอธิบาย เช่นพิจารณา Halo Value แท็บเล็ต 7 นิ้ว PPI = 133 ความละเอียด = 480 * 800 ขนาด = 7 'นิ้ว. ถ้าเราพิจารณา mdpi เป็นฐานควรใช้มิติข้อมูลที่กำหนดไว้ในค่า -sw480 แต่ใช้มิติจากค่า -sw600 ฉันไม่เข้าใจว่าทำไมสิ่งนี้จึงเกิดขึ้น ขอบคุณมากสำหรับโพสต์ของคุณ บันทึกเวลาที่สูญเสียไปและขจัดความสับสน ฉันคิดว่าสิ่งนี้ควรอยู่ในเว็บไซต์ทางการของ Android ชื่นชมความพยายามของคุณ
Smeet

1
ฉันคิดว่านี่เป็นคำตอบที่ดีที่สุดที่ฉันเคยเห็น ฉันกำลังมองหาคำตอบดังกล่าวมานานแล้ว และในที่สุดฉันก็ได้รับมัน ขอบคุณทุกคนที่มีส่วนร่วมสำหรับคำตอบนี้เพื่อให้เข้าใจมากขึ้น
Hiren Dixit

1

นักออกแบบควรสร้างแบบฐานของ

base size of mdpi devices * density conversion factor of highest supported density bucket
ขนาดขนาดหน้าจอพื้นฐานคือ 320 X 480 พิกเซลและที่เก็บข้อมูลความหนาแน่นมีดังนี้:

  • ldpi: 0.75
  • mdpi: 1.0 (ความหนาแน่นพื้นฐาน)
  • hdpi: 1.5
  • xhdpi: 2.0
  • xxhdpi: 3.0
  • xxxhdpi: 4.0

และในการจัดการกับพื้นที่ว่างเพิ่มเติมบนอุปกรณ์ Android ควรใช้ส่วนประกอบที่ยืดได้ทั้งในทิศทาง (แนวนอนและแนวตั้ง) ดูข้อมูลโดยละเอียดได้ที่นี่:

http://vinsol.com/blog/2014/11/20/tips-for-designers-from-a-developer/

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