2012-11-07 9 views
119

Tôi muốn chỉ định kích thước văn bản của riêng mình trong ứng dụng, nhưng tôi đang gặp sự cố khi thực hiện việc này.Kích thước phông chữ của TextView trong các thay đổi ứng dụng Android về thay đổi kích thước phông chữ từ cài đặt gốc

Khi tôi thay đổi kích thước phông chữ trong cài đặt thiết bị, kích thước phông chữ của ứng dụng của tôi TextView cũng thay đổi.

+1

hãy đặt một số mã. –

+2

đó là hành vi mặc định nếu bạn thay đổi kích thước phông chữ của phông chữ gốc của thiết bị thì nó cũng ảnh hưởng đến kích thước phông chữ ứng dụng của bạn. –

+0

bạn có thể tìm thấy câu trả lời từ đây http://stackoverflow.com/questions/16706076/font-size-and-images-for-different-devices/16910589#16910589 –

Trả lời

161

Thực ra, kích thước phông chữ Cài đặt chỉ ảnh hưởng đến kích thước trong sp. Vì vậy, tất cả những gì bạn cần làm - xác định textSize trong dp thay vì sp, khi đó cài đặt sẽ không thay đổi kích thước văn bản trong ứng dụng của bạn.

Dưới đây là một liên kết đến tài liệu: Dimensions

Tuy nhiên xin lưu ý rằng hành vi dự kiến ​​là các phông chữ trong tất cả các ứng tôn trọng sở thích của người dùng. Có nhiều lý do người dùng có thể muốn điều chỉnh kích thước phông chữ và một số người trong số họ thậm chí có thể là người dùng khiếm thị về mặt y tế. Sử dụng dp thay vì sp cho văn bản có thể dẫn đến phân biệt đối xử không mong muốn đối với một số người dùng ứng dụng của bạn.

+7

Một thời gian dài tôi muốn biết nếu có bất kỳ quy tắc nào khi tôi nên sử dụng 'sp' và khi tôi nên sử dụng' dp'. Tôi nhận được phản hồi thực sự tốt ở đây: http://stackoverflow.com/questions/11638691/android-sp-vs-dp-texts-what-would-adjust-the-scale-and-what-is-the-philosoph – Sam

39

Sử dụng loại tài nguyên dimension như bạn sử dụng string tài nguyên (DOCS).

Trong file dimens.xml của bạn, khai báo các biến chiều của bạn:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <dimen name="textview_height">25dp</dimen> 
    <dimen name="textview_width">150dp</dimen> 
    <dimen name="ball_radius">30dp</dimen> 
    <dimen name="font_size">16sp</dimen> 
</resources> 

Sau đó, bạn có thể sử dụng các giá trị như thế này:

<TextView 
    android:layout_height="@dimen/textview_height" 
    android:layout_width="@dimen/textview_width" 
    android:textSize="@dimen/font_size"/> 

Bạn có thể tuyên bố dimens.xml tập tin khác nhau với nhiều loại khác nhau của màn hình. Thực hiện việc này sẽ đảm bảo giao diện mong muốn của ứng dụng trên các thiết bị khác nhau.

Khi bạn không chỉ định android:textSize, hệ thống sẽ sử dụng giá trị mặc định.

+1

vấn đề không phải là màn hình. Đó là kích thước phông chữ gốc được chọn trong cài đặt hiển thị android dẫn đến sự cố được đề cập –

22

Cũng lưu ý rằng nếu textSize được đặt trong mã, hãy gọi textView.setTextSize(X) diễn giải số (X) là SP. Sử dụng setTextSize(TypedValue.COMPLEX_UNIT_DIP, X) để đặt giá trị trong dp.

125

Các dễ nhất để làm như vậy chỉ đơn giản là sử dụng một cái gì đó như sau:

android:textSize="32sp" 

Nếu bạn muốn biết thêm về textSize thuộc tính, bạn có thể kiểm tra Android developer documentation.

+1

đây thực sự là lý do tại sao TS có vấn đề, sử dụng 'sp' thay vì 'dp' – Boy

+5

Tôi vẫn không biết tại sao có 100 upvotes. bởi vì nếu chúng ta sử dụng sp cho thiết lập văn bản trong ứng dụng. Sau đó, chúng tôi thay đổi kích thước phông chữ trong Cài đặt, ứng dụng TextView trong ứng dụng cũng thay đổi –

10

Nó không phải là một điều tốt để phải xác định DIP hoặc SP một lần nữa bằng mã khi đã được xác định trong một tập tin dimen.xml.

Tôi nghĩ rằng lựa chọn tốt nhất là sử dụng PX khi sử dụng một giá trị dimen.xml:

tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimensionPixelSize(R.dimen.txt_size)); 

Bằng cách này, bạn có thể chuyển từ DP để SP nếu cần thiết trong dimen.xml tập tin mà không cần phải thay đổi bất kỳ mã nào.

1

Sử dụng kích thước phông chữ trong DP thay vì SPs trong textSize giải quyết này.