88

Trong dimens.xml, tôi có:

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

Trong thời gian chạy, tôi nhận được 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áy tính bảng 10 ((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, nó là 27.

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

textView.setTextSize(size)

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

|
262
<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));
|
  • 1

    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 đã sử dụng COMPLEX_UNIT_DP với suy nghĩ tôi cần chỉ định loại đầu vào chứ không phải loại đầu ra.

    – Dương Đăng Khương 19:44:58 21/11/2013
  • 1

    Cứu người. theo mặc định kích thước là trong sp ...

    – Trịnh Bích Ðiệp 07:04:35 28/07/2016
  • 1

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

    – Tạ Nam Việt 04:03:11 06/04/2017
  • 1

    Đố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ế?

    – Tạ Chí Thành 15:20:16 24/10/2018
  • 1

    @dphans Resources.getDimension()Phương thức trả về giá trị đã được nhân với số liệu thích hợp

    – Vũ Trường Phúc 15:18:22 14/11/2018
3

Cả hai phương thức getDimensionPixelSize () và getDimension () đều sử dụng mật độ màn hình để tính toán pixel. 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 tỷ lệ 1,5 để chuyển đổi dp sang sp. 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ỉ tạo hai tệp dimens.xml một trong thư mục giá trị cho điện thoại và một tệp khác trong giá trị-sw600dp cho máy tính bảng (bạn cũng có thể sử dụng thư mục value-sw720dp-Land để lưu trữ kích thước cho máy tính bảng 10 inch theo hướng ngang).

Bạn có thể đọc thêm về kích thước trong Android tại: http://android4beginners.com/2013/07/appcill-c-everything-about-sizes-and-dimensions-in-android/

|
1

Bạn có thể sử dụng sdp (pixel desnsity có thể mở rộng) https://github.com/intuit/sdp thay cho dp, điều này chắc chắn sẽ cứu mạng bạn

|

Câu trả lời của bạn (> 20 ký tự)

Bằng cách click "Đăng trả lời", bạn đồng ý với Điều khoản dịch vụ, Chính sách bảo mật and Chính sách cookie của chúng tôi.

Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ hoặc hỏi câu hỏi của bạn.