เกี่ยวกับขนาดรูปภาพและเนื้อหาของ Android


86

ฉันต้องการชี้แจงข้อสงสัยเกี่ยวกับเนื้อหารูปภาพสำหรับแอปของฉัน

ถ้าฉันระบุในไฟล์ xml ว่าความสูงของบางสิ่ง [มุมมองภาพ] คือความสูง 50 dip

ฉันควรเลือกหน้าจอประเภทใดจากโฟลเดอร์ทรัพยากร

drawable, hdpi, ldpi, mdpi, xhdpi,

เพื่อให้มีภาพที่มีความสูง 50 px

และเปอร์เซ็นต์สำหรับรูปภาพขนาดใหญ่และขนาดเล็กเป็นเท่าใดเมื่อเทียบกับรูปภาพพื้นฐาน

เช่นใน iOS, @ 2x, มีขนาดเป็น 2 เท่าของขนาดภาพอย่างแท้จริงและคุณบอกว่าขนาดปกติโดยใช้โปรแกรม

ขอบคุณ!


1
คำถามของคุณมีคำอธิบายอยู่ในคู่มือของ Android: developer.android.com/guide/practices/screens_support.html
Marcin Orlowski

คำตอบ:


373

mdpiคือความหนาแน่นอ้างอิงนั่นคือ 1 px บนmdpiจอแสดงผลเท่ากับ 1 dip อัตราส่วนสำหรับการปรับขนาดสินทรัพย์คือ:

ldpi | mdpi | tvdpi | hdpi | xhdpi | xxhdpi | xxxhdpi
0.75 | 1    | 1.33  | 1.5  | 2     | 3      | 4

แม้ว่าคุณจะไม่จำเป็นต้องกังวลจริงๆtvdpiเว้นแต่คุณจะพัฒนาสำหรับ Google TV หรือ Nexus 7 ดั้งเดิมโดยเฉพาะ - แต่แม้แต่ Google ก็แนะนำให้ใช้hdpiเนื้อหา

สิ่งนี้หมายความว่าหากคุณกำลังทำรูปภาพ 48dip และวางแผนที่จะรองรับได้สูงสุดxxhdpi resolutionคุณควรเริ่มต้นด้วยรูปภาพ 144px (192px หากคุณต้องการเนื้อหาเนทีฟสำหรับ xxxhdpi) และสร้างรูปภาพต่อไปนี้เพื่อความหนาแน่น:

ldpi    | mdpi    | tvdpi    | hdpi    | xhdpi     | xxhdpi    | xxxhdpi
36 x 36 | 48 x 48 | 64 x 64  | 72 x 72 | 96 x 96   | 144 x 144 | 192 x 192

และสิ่งเหล่านี้ควรจะแสดงที่ประมาณขนาดเดียวกันบนอุปกรณ์ใด ๆ ให้คุณได้วางเหล่านี้ในโฟลเดอร์หนาแน่นเฉพาะ (เช่นdrawable-xhdpi, drawable-hdpiฯลฯ )

สำหรับการอ้างอิงความหนาแน่นของพิกเซลสำหรับสิ่งเหล่านี้คือ:

ldpi  | mdpi  | tvdpi  | hdpi  | xhdpi  | xxhdpi  | xxxhdpi
120   | 160   | 213    | 240   | 320    | 480     | 640

32
นี่เป็นคำอธิบายที่ง่ายที่สุดสำหรับหัวข้อนี้ที่ฉันเคยเห็นทางออนไลน์ทุกที่ ฉันจองอย่างแท้จริงทำเครื่องหมายไว้ในสถานีงานนักออกแบบของฉัน lol
James andresakis

10
ฮามาก! : P เพิ่งเพิ่มข้อมูลสำหรับ XXHDPI ด้วย
Kevin Coppock

คุณจะตัดสินใจได้อย่างไรว่าคุณต้องเริ่มจาก 48dip? สมมติว่าคุณมีแท็บเล็ต (mdpi) อยู่ในมือคุณเริ่มด้วยขนาดแบบสุ่มและทำซ้ำจนกว่าจะดู "ใหญ่พอ" หรือไม่
phtrivier

@phtrivier มันเป็นขนาดที่ฉันใช้เป็นตัวอย่าง ในกรณีนี้จะมีขนาดเท่ากับไอคอนตัวเรียกใช้งาน ขนาดใดก็ตามที่คุณต้องการสำหรับสินทรัพย์อื่นขึ้นอยู่กับกรณีการใช้งานของคุณ
Kevin Coppock

1
ฉันยังสร้างเครื่องมือเพื่อคำนวณสิ่งนี้ได้ทันที: pixit-tool.web.app/#
wdavies973

22

จากคำตอบของkcoppockฉันได้สร้างเชลล์สคริปต์ต่อไปนี้เพื่อปรับขนาดรูปภาพทั้งหมดให้มีขนาดที่ถูกต้องโดยอัตโนมัติและคัดลอกในโฟลเดอร์ Android drawable- * - ตามลำดับ!

สร้างเชลล์สคริปต์และวางรหัสต่อไปนี้:

createAndroidImages.sh

#!/bin/bash

read -p "Please enter the subfolder of the original images? " folder
read -p "How many DP (width) should the image have? " dp

for i in $(find $folder/. -type f -name "*[A-Z]*"); do mv "$i" "$(echo $i | tr A-Z a-z)"; done

mkdir drawable-ldpi
mkdir drawable-mdpi
mkdir drawable-tvdpi
mkdir drawable-hdpi
mkdir drawable-xhdpi
mkdir drawable-xxhdpi
mkdir drawable-xxxhdpi

cp $folder/* drawable-ldpi/
cp $folder/* drawable-mdpi/
cp $folder/* drawable-tvdpi/
cp $folder/* drawable-hdpi/
cp $folder/* drawable-xhdpi/
cp $folder/* drawable-xxhdpi/
cp $folder/* drawable-xxxhdpi/

sips -Z $(echo $dp*3/4 | bc) drawable-ldpi/*
sips -Z $(echo $dp | bc) drawable-mdpi/*
sips -Z $(echo $dp*4/3 | bc) drawable-tvdpi/*
sips -Z $(echo $dp*3/2 | bc) drawable-hdpi/*
sips -Z $(echo $dp*2 | bc) drawable-xhdpi/*
sips -Z $(echo $dp*3 | bc) drawable-xxhdpi/*
sips -Z $(echo $dp*4 | bc) drawable-xxxhdpi/*

ใส่สคริปต์ของคุณในโฟลเดอร์และภาพต้นฉบับของคุณในโฟลเดอร์ย่อยเช่น:

/
.. createAndroidImages.sh
.. originalImages/
....a123.png
....b456.png

รันเชลล์สคริปต์ในเทอร์มินัล: sh createAndroidImages.sh

ในการคัดลอกภาพที่สร้างโดยตรงไปยังโครงการ Android Studio ของคุณ:

cp -R drawable-* ~/AndroidStudioProjects/ESCRating/app/src/main/res/

เสร็จแล้ว! หวังว่านี่จะช่วยใครสักคน!

ปล. โปรดทราบว่าภาพต้นฉบับควรมีความกว้างอย่างน้อยสี่เท่าของพิกเซลมากกว่าความกว้างที่ต้องการในหน่วย dpi (เช่น 4 (factor xxxhdpi) * 30dpi => 120px) เพื่อให้ได้ผลลัพธ์ที่ดีที่สุด


4

kcoppock ทำงานได้ดีเยี่ยมในการอธิบายความหนาแน่นของหน้าจอ Andorid ฉันอยากจะเพิ่มอีกหนึ่งประเด็นเกี่ยวกับคำถามเดิม

ไอคอนตัวเรียกใช้แท็บเล็ต Android ใช้ที่เก็บข้อมูลความหนาแน่นหนึ่งชุด

ตามโพสต์ Google+ ของผู้พัฒนา Nick Butcher ของ Google

หน้าจอที่สวยงามบน Nexus 10 ตกอยู่ในถังความหนาแน่น XHDPI บนแท็บเล็ต Launcher จะใช้ไอคอนจากที่เก็บข้อมูลความหนาแน่นเดียว [0] เพื่อแสดงให้ใหญ่ขึ้นเล็กน้อย เพื่อให้แน่ใจว่าไอคอนตัวเรียกใช้งานของคุณ (เนื้อหาที่สำคัญที่สุดของแอปของคุณ) มีความคมชัดคุณต้องเพิ่มไอคอน 144 * 144px ในโฟลเดอร์ drawable-xxhdpi หรือ drawable-480dpi

ค้นหาแหล่งที่มาที่นี่


1

นี่คือการคำนวณของฉันสำหรับการลดขนาดและลดขนาดรูปภาพสำหรับ Android -

ldpi (120 dpi, หน้าจอความหนาแน่นต่ำ) - 36px x 36px (0.19) (1)

mdpi (160 dpi, หน้าจอความหนาแน่นปานกลาง) - 48px x 48px (0.25) (1.33)

hdpi (240 dpi, หน้าจอความหนาแน่นสูง) - 72px x 72px (0.38) (2)

xhdpi (320 dpi, หน้าจอความหนาแน่นสูงพิเศษ) - 96px x 96px (0.5) (2.67)

xxhdpi (480 dpi, หน้าจอความหนาแน่นสูงพิเศษ) - 144px x 144px (0.75) (4)

xxxhdpi (640 dpi หน้าจอความหนาแน่นพิเศษพิเศษพิเศษ) - 192px x 192px (1.0) (5.33)

บทความสั้น ๆ ของฉันมีประโยชน์ในการสร้างทรัพยากรรูปภาพโดยใช้ imagemagick เมื่อมีรูปภาพหลายภาพ

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