câu trả lời bổ sung
danh sách @Devunwired 3 lý do để sử dụng dimens.xml
. Dưới đây là chi tiết về cách thực hiện điều đó.
1. Tái sử dụng
Nếu bạn thiết lập một số dp
hoặc sp
giá trị trong dimens.xml
một lần như thế này
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="textview_padding">16dp</dimen>
<dimen name="large_text_size">30sp</dimen>
</resources>
bạn có thể tái sử dụng nó trong suốt ứng dụng của bạn trong nhiều địa điểm.
<TextView
android:padding="@dimen/textview_padding"
android:textSize="@dimen/large_text_size"
... />
<TextView
android:padding="@dimen/textview_padding"
android:textSize="@dimen/large_text_size"
... />
Sau đó, khi cần thay đổi, bạn chỉ cần thực hiện ở một nơi.
Ghi chú
- này về cơ bản là tác dụng tương tự như sử dụng một phong cách hoặc chủ đề.
- Cẩn thận không cho hai chế độ xem khác nhau với cùng giá trị
dimen
nếu chúng thực sự không nên.Nếu bạn cần thực hiện thay đổi cho một tập hợp chế độ xem nhưng không phải là một lượt xem khác, thì bạn sẽ phải quay lại từng chế độ xem một cách riêng biệt, điều này sẽ đánh bại mục đích.
2. Kích Difference
- @Devunwired gọi này khác biệt Mật độ, nhưng nếu bạn đang sử dụng
dp
(mật độ điểm ảnh độc lập), điều này đã được chăm sóc là những vấn đề chênh lệch mật độ cho tất cả nhưng các trường hợp nhỏ nhất. Vì vậy, theo ý kiến của tôi, kích thước màn hình là một yếu tố quan trọng hơn để sử dụng dimens.xml
.
Đệm có thể trông tuyệt vời trên điện thoại, nhưng khi ứng dụng chạy trên máy tính bảng, nó trông quá hẹp. Bạn có thể giải quyết vấn đề này bằng cách tạo hai (hoặc nhiều) phiên bản khác nhau của dimens.xml
.
Nhấp chuột phải vào thư mục res
và chọn Mới> Tệp tài nguyên giá trị. Sau đó, viết trong dimens
và chọn Chiều rộng màn hình nhỏ nhất. Viết trong cho chiều rộng (7 ”máy tính bảng). (Có nhiều cách khác của việc lựa chọn kích cỡ. Xem documentation và this answer để biết thêm.)
này sẽ thực hiện một values
thư mục đó sẽ được sử dụng cho các thiết bị có màn hình nhỏ nhất chiều rộng là 600dp
. Trong giao diện Android, hai tệp dimens.xml
trông giống như thế này.
Bây giờ bạn có thể sửa đổi chúng một cách độc lập.
giá trị/dimens.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="my_default_padding">16dp</dimen>
</resources>
giá trị-sw600dp/dimens.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="my_default_padding">64dp</dimen>
</resources>
Khi sử dụng của bạn dimen
bạn chỉ cần cài đặt nó với tên mà bạn sử dụng trong cả hai tệp dimens.xml
.
<LinearLayout
...
android:padding="@dimen/my_default_padding">
</LinearLayout>
Hệ thống sẽ tự động chọn đúng giá trị cho bạn tùy thuộc vào thiết bị mà người dùng đang sử dụng.
3. Đọc sách trong từ mã
Đôi khi nó là một nỗi khổ rộng theo chương trình giữa px
và dp
(xem this answer trong bao).
Nếu bạn có một giá trị cố định dp
đã được xác định trong dimens.xml
như thế này
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="my_dp_value">16dp</dimen>
</resources>
Sau đó, bạn có thể dễ dàng có được nó với
int sizeInPixels = getResources().getDimensionPixelSize(R.dimen.my_dp_value);
và nó đã sẽ được chuyển đổi sang pixel cho bất cứ thiết bị mật độ người dùng có.
Giới thiệu về # 2, làm thế nào để bạn phân biệt trong tệp 'dimens.xml' (cung cấp ví dụ nếu có thể)? Lý do 3 rất thuyết phục. –
@Nghe nhiều tệp trong các thư mục đủ điều kiện. Ví dụ, đặt một 'dimens.xml' trong' res/values' cho các giá trị mặc định và một giá trị khác trong 'res/values-ldpi' bao gồm số ít tôi muốn ghi đè cho các thiết bị mật độ thấp. – Devunwired
Tôi cho rằng chỉ có sẵn cho thư mục drawables. Cảm ơn vì tiền hỗ trợ. –