Nhận kích thước từ XML và đặt kích thước văn bản trong thời gian chạy


101

Trongmens.xml, tôi có:

<dimen name="text_medium">18sp</dimen>

Trong thời gian chạy, tôi lấy giá trị này và đặt kích thước văn bản của chế độ xem văn bản:

int size = context.getResources().getDimensionPixelSize(R.dimen.text_medium);
textView.setTextSize(size).

Trên một máy tính bảng 10 inch (1280 x 800), mọi thứ đều ổn; nhưng trên điện thoại (800 x 480), chế độ xem văn bản có phông chữ rất lớn. Trên máy tính bảng, kích thước bằng 18; trên điện thoại, là 27.

Nếu tôi đặt kích thước theo cách thủ công bằng cách:

textView.setTextSize(size)

kích thước bình thường trên cả hai thiết bị.

Câu trả lời:


297
<dimen name="text_medium">18sp</dimen>

Đặt kích thước trong mã:

textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.text_medium));

7
Tôi không biết về OP, nhưng đây là câu trả lời tôi đang tìm kiếm. Tôi đang sử dụng COMPLEX_UNIT_DP vì nghĩ rằng tôi cần chỉ định loại đầu vào chứ không phải loại đầu ra.
HenryAdamsJr

khi tôi có được kích thước phông chữ của tôi (được định nghĩa trong một sp) tôi nhận được 60. Khi tôi đặt nó trở lại với OMPLEX_UNIT_PX và lấy trong một lần nữa tôi nhận được 70. Có vẻ không mọi thứ đều rõ ràng ở đây
Gleichmut

2
Đối với kích thước văn bản, tại sao tôi không thể sử dụng TypedValue.COMPLEX_UNIT_SPthay thế?
dphans

3
@dphans Các Resources.getDimension()phương thức trả về giá trị mà đã được nhân thích hợp số liệu
pkuszewski

2
@pkuszewski Chà, thật khó hiểu.
Big_Chair

4

Cả hai phương thức getDimensionPixelSize () và getDimension () đều sử dụng mật độ màn hình để tính điểm ảnh. Mật độ màn hình điện thoại của bạn rõ ràng là hdpi (240dpi) vì vậy nó sử dụng thang đo 1,5 để chuyển đổi dp sang sp. Phép toán đơn giản 18 * 1,5 = 27.

Có vẻ như mật độ máy tính bảng của bạn là mdpi (160dpi) nên tỷ lệ chỉ là 1: 1.

Nhưng nếu bạn so sánh kích thước thực của cả hai văn bản thì nó sẽ giống nhau.

Cách tốt nhất là chỉ cần tạo hai tệp kích thước.

Bạn có thể đọc thêm về các thứ nguyên trong Android tại: http://android4beginners.com/2013/07/append-c-everything-about-sizes-and-dimensions-in-android/


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.