Giới thiệu về kích thước nội dung và hình ảnh Android


86

Tôi cần làm rõ một số nghi ngờ về nội dung hình ảnh cho ứng dụng của mình,

nếu tôi chỉ định trong tệp xml rằng chiều cao của thứ gì đó [chế độ xem hình ảnh] là chiều cao nhúng 50

tôi nên chọn loại màn hình nào từ thư mục tài nguyên?

drawable, hdpi, ldpi, mdpi, xhdpi,

để có hình ảnh chiều cao 50 px,

và tỷ lệ phần trăm cho hình ảnh kích thước lớn hơn, nhỏ hơn so với hình ảnh cơ sở,

giống như trong iOS, @ 2x, có nghĩa là gấp 2 lần kích thước của hình ảnh và bạn nói theo chương trình là kích thước bình thường,

cảm ơn!


1
Câu hỏi của bạn được giải thích trong hướng dẫn sử dụng Android: developer.android.com/guide/practices/screens_support.html
Marcin Orlowski,

Câu trả lời:


373

mdpilà mật độ tham chiếu - nghĩa là 1 px trên mdpimàn hình bằng 1 lần nhúng. Tỷ lệ cho quy mô tài sản là:

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

Mặc dù bạn không thực sự cần phải lo lắng về việc tvdpitrừ khi bạn đang phát triển đặc biệt cho Google TV hoặc Nexus 7 ban đầu - nhưng ngay cả Google cũng khuyên bạn nên sử dụng nội dung đơn giản hdpi.

Điều này có nghĩa là nếu bạn đang tạo hình ảnh 48dip và có kế hoạch hỗ trợ tối đa xxhdpi resolution, bạn nên bắt đầu với hình ảnh 144px (192px nếu bạn muốn nội dung gốc cho xxxhdpi) và tạo các hình ảnh sau cho mật độ:

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

Và những sẽ hiển thị ở khoảng cùng kích thước trên mọi thiết bị, với điều kiện bạn đã đặt chúng trong thư mục mật độ cụ thể (ví dụ như drawable-xhdpi, drawable-hdpi, vv)

Để tham khảo, mật độ pixel cho những điều này là:

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

32
Đây là lời giải thích dễ dàng nhất về chủ đề này mà tôi từng thấy trên mạng ở mọi nơi. Tôi thực sự là cuốn sách đã đánh dấu nó trên trạm làm việc của các nhà thiết kế của tôi lol
James andresakis

10
Haha, tuyệt vời! : P Cũng vừa thêm thông tin cho XXHDPI.
Kevin Coppock

Làm thế nào để bạn quyết định bạn phải bắt đầu từ một 48dip? Giả sử bạn chỉ có một máy tính bảng (mdpi) trong tay, bạn có bắt đầu với kích thước ngẫu nhiên và lặp lại cho đến khi nó trông "đủ lớn" không?
phtrivier

@phtrivier Đó chỉ là một kích thước mà tôi đã sử dụng làm ví dụ. Trong trường hợp này, đó là kích thước của một biểu tượng trình khởi chạy. Bất kỳ kích thước nào bạn cần cho các tài sản khác tùy thuộc vào trường hợp sử dụng của bạn.
Kevin Coppock

1
Tôi cũng đã tạo một công cụ để tính toán điều này một cách nhanh chóng: pixit-tool.web.app/#
wdavies973

22

Dựa trên câu trả lời của kcoppock , tôi đã tạo tập lệnh shell sau để tự động thay đổi kích thước tất cả các hình ảnh thành kích thước chính xác và sao chép chúng trong các thư mục drawable- * - tương ứng của Android!

Tạo một tập lệnh shell và dán đoạn mã sau:

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/*

Đặt tập lệnh của bạn trong một thư mục và hình ảnh gốc của bạn trong một thư mục con, ví dụ:

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

Chạy tập lệnh shell trong terminal: sh createAndroidImages.sh

Để sao chép trực tiếp các hình ảnh đã tạo vào Dự án Android Studio của bạn:

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

Bạn đã hoàn tất! Hy vọng điều này sẽ giúp ai đó!

PS Xin lưu ý rằng hình ảnh gốc phải có chiều rộng ít nhất gấp bốn lần chiều rộng tính bằng pixel, so với chiều rộng mong muốn tính bằng dpi (ví dụ: 4 (hệ số xxxhdpi) * 30dpi => 120px) để có kết quả tối ưu.


4

kcoppock đã làm rất tốt việc giải thích mật độ màn hình Andorid. Tôi chỉ muốn thêm một điểm nữa về câu hỏi ban đầu.

Biểu tượng trình khởi chạy Máy tính bảng Android sử dụng một nhóm mật độ.

Theo bài đăng trên Google+ của nhà phát triển Nick Butcher của Google

Màn hình tuyệt đẹp trên Nexus 10 rơi vào nhóm mật độ XHDPI. Trên máy tính bảng, Trình khởi chạy sử dụng các biểu tượng từ một nhóm mật độ trở lên [0] để hiển thị chúng lớn hơn một chút. Để đảm bảo rằng biểu tượng trình khởi chạy (được cho là tài sản quan trọng nhất của ứng dụng của bạn) sắc nét, bạn cần thêm biểu tượng 144 * 144px trong thư mục drawable-xxhdpi hoặc drawable-480dpi.

Tìm nguồn tại đây


1

Đây là tính toán của tôi để nâng cấp và thu nhỏ hình ảnh cho android-

ldpi (120 dpi, màn hình mật độ thấp) - 36px x 36px (0,19) (1)

mdpi (160 dpi, màn hình mật độ trung bình) - 48px x 48px (0,25) (1,33)

hdpi (240 dpi, màn hình mật độ cao) - 72px x 72px (0,38) (2)

xhdpi (320 dpi, Màn hình mật độ cực cao) - 96px x 96px (0,5) (2,67)

xxhdpi (480 dpi, Màn hình mật độ cực cao) - 144px x 144px (0,75) (4)

xxxhdpi (640 dpi, Màn hình mật độ cực cao) - 192px x 192px (1,0) (5,33)

Bài viết ngắn của tôi rất hữu ích để tạo tài nguyên hình ảnh bằng imagemagick, khi có nhiều hình ảnh.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.