Kích thước văn bản và các kích thước màn hình android khác nhau


121

Tôi biết, nó đã được thảo luận 1000 lần, nhưng tôi không thể điều chỉnh kích thước văn bản cho các kích thước màn hình khác nhau. Tôi cố gắng sử dụng 'sp' làm đơn vị kích thước trong phong cách tùy chỉnh của mình:

<style name="CustumButtonStyle" parent="@android:style/Widget.Button">
    ...
    <item name="android:textSize">30sp</item>
    ...
</style>

Trong 2,7 QVGA, nó có vẻ ổn:

2.7QVGA 30sp

Nhưng trong WSVGA 7in, nó trông như thế này:

7in WSVGA 30sp

Tôi đã cố gắng sử dụng cả 'sp' và 'dp' với cùng một kết quả.

Bạn có thể vui lòng giải thích cách làm cho các nút này trông giống nhau trên màn hình nào không?

Kiểu nút tùy chỉnh đầy đủ

<style name="CustumButtonStyle" parent="@android:style/Widget.Button">
    <item name="android:background">@drawable/custom_button</item>
    <item name="android:layout_width">fill_parent</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:layout_margin">3dp</item>
    <item name="android:textColor">#ffffff</item>
    <item name="android:gravity">center</item>
    <item name="android:textSize">30sp</item>
    <item name="android:textStyle">bold</item>
    <item name="android:shadowColor">#000000</item>
    <item name="android:shadowDx">1</item>
    <item name="android:shadowDy">1</item>
    <item name="android:shadowRadius">2</item>
</style>

Và trong chủ đề ứng dụng của tôi, tôi có

<item name="android:buttonStyle">@style/CustumButtonStyle</item>

Và có bố cục của tôi:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/RelativeLayout1"
android:layout_width="fill_parent"
android:background="@drawable/grid"
android:gravity="center"
android:orientation="vertical" android:layout_height="fill_parent">

<Button
    android:id="@+id/buttonContinue"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_gravity="center"
    android:gravity="center"
    android:text="@string/continue_game" android:layout_marginTop="3dp" android:layout_marginBottom="3dp"/>



<Button
    android:id="@+id/buttonNewGame"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/buttonContinue"
    android:layout_alignRight="@+id/buttonContinue"
    android:layout_below="@+id/buttonContinue"
    android:layout_gravity="center"
    android:gravity="center"
    android:text="@string/new_game" android:layout_marginTop="3dp" android:layout_marginBottom="3dp"/>



<Button
    android:id="@+id/ButtonAbout"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/buttonNewGame"
    android:layout_alignRight="@+id/buttonNewGame"
    android:layout_below="@+id/buttonNewGame"
    android:layout_gravity="center"
    android:gravity="center"
    android:text="@string/about" android:layout_marginTop="3dp" android:layout_marginBottom="3dp"/>


Trên màn hình của bạn, chúng trông giống nhau. Hãy chắc chắn rằng quy mô xem của bạn là 100%
Dmitry Grigoryevich Zaytsev

bạn có thể tìm thấy câu trả lời từ đây stackoverflow.com/questions/16706076/...
Bhavesh Jethani

Câu trả lời:


160

@for Sứ Tôi nghĩ bạn cần kiểm tra Google IO Pdf dành cho thiết kế này . Trong bản pdf đó, hãy truy cập Trang No: 77, trong đó bạn sẽ tìm thấy cách ở đó đề xuất sử dụngmens.xml cho các thiết bị khác nhau của Android. Ví dụ xem cấu trúc bên dưới:

res/values/dimens.xml

res/values-small/dimens.xml

res/values-normal/dimens.xml

res/values-large/dimens.xml

res/values-xlarge/dimens.xml

cho Ví dụ bạn đã sử dụng các giá trị dưới đây trong các giá trị củamens.xml.

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <dimen name="text_size">18sp</dimen>
</resources>

Trong thư mục giá trị khác, bạn cần thay đổi các giá trị cho kích thước văn bản của mình.

Lưu ý: Như được chỉ ra bởi @espinchi, kích thước nhỏ, bình thường, lớn và xlarge đã không được chấp nhận kể từ Android 3.2 vì những điều sau:

Khai báo bố cục máy tính bảng cho Android 3.2

Đối với thế hệ máy tính bảng đầu tiên chạy Android 3.0, cách thích hợp để khai báo bố cục máy tính bảng là đặt chúng vào một thư mục với bộ định cấu hình xlarge (ví dụ: res / layout-xlarge /). Để phù hợp với các loại máy tính bảng và kích thước màn hình khác — cụ thể là máy tính bảng 7 inch — Android 3.2 giới thiệu một cách mới để chỉ định tài nguyên cho các kích thước màn hình rời rạc hơn. Kỹ thuật mới dựa trên lượng không gian mà bố cục của bạn cần (chẳng hạn như 600dp chiều rộng), thay vì cố gắng làm cho bố cục của bạn phù hợp với các nhóm kích thước tổng quát (chẳng hạn như lớn hoặc xlarge).

Lý do khiến việc thiết kế máy tính bảng 7 "trở nên phức tạp khi sử dụng các nhóm kích thước tổng quát là về mặt kỹ thuật, máy tính bảng 7" nằm cùng nhóm với thiết bị cầm tay 5 "(nhóm lớn). Trong khi hai thiết bị này có vẻ gần giống nhau về kích thước , lượng không gian cho giao diện người dùng của ứng dụng là khác nhau đáng kể, cũng như phong cách tương tác của người dùng. Do đó, màn hình 7 "và 5" không phải lúc nào cũng sử dụng cùng một bố cục. Để bạn có thể cung cấp các bố cục khác nhau cho hai loại màn hình, Android hiện cho phép bạn chỉ định tài nguyên bố cục của mình dựa trên chiều rộng và / hoặc chiều cao thực sự có sẵn cho bố cục ứng dụng của bạn, được chỉ định bằng đơn vị dp.

Ví dụ: sau khi bạn đã thiết kế bố cục mà bạn muốn sử dụng cho các thiết bị kiểu máy tính bảng, bạn có thể xác định rằng bố cục ngừng hoạt động tốt khi màn hình rộng dưới 600dp. Do đó, ngưỡng này trở thành kích thước tối thiểu mà bạn yêu cầu cho bố cục máy tính bảng của mình. Do đó, bây giờ bạn có thể chỉ định rằng chỉ nên sử dụng các tài nguyên bố cục này khi có ít nhất 600dp chiều rộng cho giao diện người dùng của ứng dụng của bạn.

Bạn nên chọn chiều rộng và thiết kế theo kích thước tối thiểu của mình hoặc kiểm tra chiều rộng nhỏ nhất mà bố cục của bạn hỗ trợ sau khi hoàn tất.

Lưu ý: Hãy nhớ rằng tất cả các số liệu được sử dụng với các API kích thước mới này là giá trị pixel (dp) không phụ thuộc vào mật độ và kích thước bố cục của bạn cũng phải luôn được xác định bằng đơn vị dp, vì điều bạn quan tâm là lượng không gian màn hình có sẵn sau hệ thống chiếm mật độ màn hình (trái ngược với việc sử dụng độ phân giải pixel thô). Để biết thêm thông tin về pixel không phụ thuộc vào mật độ, hãy đọc Điều khoản và khái niệm ở phần trước trong tài liệu này. Sử dụng bộ định lượng kích thước mới

Các cấu hình tài nguyên khác nhau mà bạn có thể chỉ định dựa trên không gian có sẵn cho bố cục của bạn được tóm tắt trong bảng 2. Các định tính mới này cung cấp cho bạn nhiều quyền kiểm soát hơn đối với các kích thước màn hình cụ thể mà ứng dụng của bạn hỗ trợ, so với các nhóm kích thước màn hình truyền thống (nhỏ, bình thường, lớn và xlarge).

Lưu ý: Kích thước mà bạn chỉ định bằng cách sử dụng các bộ định lượng này không phải là kích thước màn hình thực tế. Thay vào đó, các kích thước dành cho chiều rộng hoặc chiều cao tính bằng đơn vị dp có sẵn cho cửa sổ hoạt động của bạn. Hệ thống Android có thể sử dụng một số màn hình cho giao diện người dùng hệ thống (chẳng hạn như thanh hệ thống ở cuối màn hình hoặc thanh trạng thái ở trên cùng), vì vậy một số màn hình có thể không khả dụng cho bố cục của bạn. Do đó, kích thước bạn khai báo phải cụ thể về kích thước mà hoạt động của bạn cần — hệ thống chiếm bất kỳ không gian nào được giao diện người dùng hệ thống sử dụng khi khai báo lượng không gian mà nó cung cấp cho bố cục của bạn. Cũng nên lưu ý rằng Thanh hành động được coi là một phần của không gian cửa sổ ứng dụng của bạn, mặc dù bố cục của bạn không khai báo nó, vì vậy nó làm giảm không gian có sẵn cho bố cục của bạn và bạn phải tính đến nó trong thiết kế của mình.

Bảng 2. Các tiêu chuẩn cấu hình mới cho kích thước màn hình (được giới thiệu trong Android 3.2). Cấu hình màn hình Giá trị định lượng Mô tả nhỏ nhất Chiều rộng swdp

Ví dụ: sw600dp sw720dp

Kích thước cơ bản của màn hình, được biểu thị bằng kích thước ngắn nhất của vùng màn hình khả dụng. Cụ thể, Chiều rộng nhỏ nhất của thiết bị là chiều cao và chiều rộng có sẵn của màn hình ngắn nhất (bạn cũng có thể nghĩ nó là "chiều rộng nhỏ nhất có thể" của màn hình). Bạn có thể sử dụng bộ định lượng này để đảm bảo rằng, bất kể hướng hiện tại của màn hình là gì, ứng dụng của bạn có chiều rộng ít nhất là dps cho giao diện người dùng của nó.

Ví dụ: nếu bố cục của bạn yêu cầu kích thước nhỏ nhất của diện tích màn hình luôn ít nhất là 600 dp, thì bạn có thể sử dụng bộ định lượng này để tạo tài nguyên bố cục, res / layout-sw600dp /. Hệ thống sẽ chỉ sử dụng các tài nguyên này khi kích thước nhỏ nhất của màn hình có sẵn ít nhất là 600dp, bất kể cạnh 600dp là chiều cao hay chiều rộng mà người dùng nhận thấy. Chiều rộng nhỏ nhất là đặc điểm kích thước màn hình cố định của thiết bị; Chiều rộng nhỏ nhất của thiết bị không thay đổi khi hướng của màn hình thay đổi.

Chiều rộng nhỏ nhất của thiết bị có tính đến trang trí màn hình và giao diện người dùng hệ thống. Ví dụ: nếu thiết bị có một số phần tử giao diện người dùng cố định trên màn hình chiếm không gian dọc theo trục của Chiều rộng nhỏ nhất, hệ thống sẽ tuyên bố Chiều rộng nhỏ nhất nhỏ hơn kích thước màn hình thực, vì đó là những pixel màn hình không có sẵn cho giao diện người dùng của bạn.

Đây là một giải pháp thay thế cho các bộ định lượng kích thước màn hình tổng quát (nhỏ, bình thường, lớn, xlarge) cho phép bạn xác định một số riêng biệt cho kích thước hiệu quả có sẵn cho giao diện người dùng của bạn. Sử dụng Chiều rộng nhỏ nhất để xác định kích thước màn hình chung rất hữu ích vì chiều rộng thường là yếu tố thúc đẩy thiết kế bố cục. Một giao diện người dùng thường sẽ cuộn theo chiều dọc, nhưng có những hạn chế khá khó khăn về không gian tối thiểu mà nó cần theo chiều ngang. Chiều rộng khả dụng cũng là yếu tố chính để xác định xem nên sử dụng bố cục một ngăn cho thiết bị cầm tay hay bố cục nhiều ngăn cho máy tính bảng. Do đó, bạn có thể quan tâm nhất đến chiều rộng nhỏ nhất có thể có trên mỗi thiết bị. Chiều rộng màn hình có sẵn wdp

Ví dụ: w720dp w1024dp

Chỉ định chiều rộng khả dụng tối thiểu theo đơn vị dp mà tại đó tài nguyên sẽ được sử dụng — được xác định bởi giá trị. Giá trị tương ứng của hệ thống cho chiều rộng thay đổi khi hướng của màn hình chuyển đổi giữa chiều ngang và chiều dọc để phản ánh chiều rộng thực tế hiện tại có sẵn cho giao diện người dùng của bạn.

Điều này thường hữu ích để xác định xem có nên sử dụng bố cục nhiều ngăn hay không, vì ngay cả trên thiết bị máy tính bảng, bạn thường sẽ không muốn bố cục nhiều ngăn giống nhau cho hướng dọc như bạn làm cho hướng ngang. Do đó, bạn có thể sử dụng tùy chọn này để chỉ định chiều rộng tối thiểu cần thiết cho bố cục, thay vì sử dụng cả hai tiêu chuẩn định hướng và kích thước màn hình cùng nhau. HDp chiều cao màn hình có sẵn

Ví dụ: h720dp h1024dp, v.v.

Chỉ định chiều cao màn hình tối thiểu theo đơn vị dp mà tại đó tài nguyên sẽ được sử dụng — được xác định bởi giá trị. Giá trị tương ứng của hệ thống cho chiều cao thay đổi khi hướng của màn hình chuyển đổi giữa chiều ngang và chiều dọc để phản ánh chiều cao thực tế hiện tại có sẵn cho giao diện người dùng của bạn.

Sử dụng điều này để xác định chiều cao theo yêu cầu của bố cục của bạn sẽ hữu ích theo cách tương tự như wdp để xác định chiều rộng cần thiết, thay vì sử dụng cả kích thước màn hình và định hướng. Tuy nhiên, hầu hết các ứng dụng sẽ không cần bộ định lượng này, vì giao diện người dùng thường cuộn theo chiều dọc và do đó linh hoạt hơn với chiều cao khả dụng, trong khi chiều rộng thì cứng hơn.

Mặc dù việc sử dụng các bộ định lượng này có vẻ phức tạp hơn so với việc sử dụng các nhóm kích thước màn hình, nhưng nó thực sự sẽ đơn giản hơn khi bạn xác định được các yêu cầu đối với giao diện người dùng của mình. Khi bạn thiết kế giao diện người dùng của mình, điều chính bạn có thể quan tâm là kích thước thực tế mà tại đó ứng dụng của bạn chuyển đổi giữa giao diện người dùng kiểu thiết bị cầm tay và giao diện người dùng kiểu máy tính bảng sử dụng nhiều ngăn. Điểm chính xác của công tắc này sẽ phụ thuộc vào thiết kế cụ thể của bạn — có thể bạn cần chiều rộng 720dp cho bố cục máy tính bảng của mình, có thể 600dp là đủ, hoặc 480dp, hoặc một số con số trong số này. Sử dụng các định tính này trong bảng 2, bạn kiểm soát được kích thước chính xác mà bố cục của bạn thay đổi.

Để thảo luận thêm về các định tính cấu hình kích thước này, hãy xem tài liệu Cung cấp tài nguyên. Ví dụ về cấu hình

Để giúp bạn nhắm mục tiêu một số thiết kế của mình cho các loại thiết bị khác nhau, dưới đây là một số con số về độ rộng màn hình điển hình:

320dp: a typical phone screen (240x320 ldpi, 320x480 mdpi, 480x800 hdpi, etc).
480dp: a tweener tablet like the Streak (480x800 mdpi).
600dp: a 7 tablet (600x1024 mdpi).
720dp: a 10 tablet (720x1280 mdpi, 800x1280 mdpi, etc).

Sử dụng các bộ định lượng kích thước từ bảng 2, ứng dụng của bạn có thể chuyển đổi giữa các tài nguyên bố cục khác nhau cho thiết bị cầm tay và máy tính bảng bằng bất kỳ số nào bạn muốn cho chiều rộng và / hoặc chiều cao. Ví dụ: nếu 600dp là chiều rộng khả dụng nhỏ nhất được bố cục máy tính bảng của bạn hỗ trợ, bạn có thể cung cấp hai bộ bố cục sau:

res / layout / main_activity.xml # Đối với thiết bị cầm tay res / layout-sw600dp / main_activity.xml # Đối với máy tính bảng

Trong trường hợp này, chiều rộng nhỏ nhất của không gian màn hình khả dụng phải là 600dp để áp dụng bố cục máy tính bảng.

Đối với các trường hợp khác mà bạn muốn tùy chỉnh thêm giao diện người dùng của mình để phân biệt giữa các kích thước, chẳng hạn như máy tính bảng 7 ”và 10”, bạn có thể xác định bố cục chiều rộng nhỏ nhất bổ sung:

res / layout / main_activity.xml # Dành cho thiết bị cầm tay (chiều rộng khả dụng nhỏ hơn 600dp) res / layout-sw600dp / main_activity.xml # Dành cho máy tính bảng 7 ”(rộng hơn 600dp) res / layout-sw720dp / main_activity.xml

Đối với máy tính bảng 10 ”(rộng 720dp và lớn hơn)

Lưu ý rằng hai bộ tài nguyên mẫu trước đó sử dụng bộ định tính "chiều rộng nhỏ nhất", swdp, chỉ định giá trị nhỏ nhất trong hai cạnh của màn hình, bất kể hướng hiện tại của thiết bị. Do đó, sử dụng swdp là một cách đơn giản để chỉ định kích thước màn hình tổng thể có sẵn cho bố cục của bạn bằng cách bỏ qua hướng của màn hình.

Tuy nhiên, trong một số trường hợp, điều có thể quan trọng đối với bố cục của bạn là chính xác chiều rộng hoặc chiều cao hiện khả dụng. Ví dụ: nếu bạn có bố cục hai ngăn với hai mảnh cạnh nhau, bạn có thể muốn sử dụng nó bất cứ khi nào màn hình cung cấp chiều rộng ít nhất 600dp, cho dù thiết bị ở hướng ngang hay dọc. Trong trường hợp này, tài nguyên của bạn có thể trông giống như sau:

res / layout / main_activity.xml # Dành cho thiết bị cầm tay (chiều rộng khả dụng nhỏ hơn 600dp) res / layout-w600dp / main_activity.xml # Nhiều ngăn (bất kỳ màn hình nào có chiều rộng khả dụng 600dp trở lên)

Lưu ý rằng tập hợp thứ hai đang sử dụng bộ định lượng "chiều rộng khả dụng", wdp. Bằng cách này, một thiết bị thực sự có thể sử dụng cả hai bố cục, tùy thuộc vào hướng của màn hình (nếu chiều rộng khả dụng ít nhất là 600dp ở một hướng và nhỏ hơn 600dp ở hướng khác).

Nếu chiều cao khả dụng là mối quan tâm đối với bạn, thì bạn có thể làm điều tương tự bằng cách sử dụng bộ định lượng hdp. Hoặc, thậm chí kết hợp vòng loại wdp và hdp nếu bạn cần thực sự cụ thể.


7
Hiện tại, những small / normal / large / xlarge này không còn được dùng nữa (tháng 12 năm 2014). Cách ưa thích hiện nay là sử dụng "swxxxdp". Xem developer.android.com/guide/practices/…
espinchi

1
@espinchi cảm ơn bạn, bạn nên đăng bài này cũng như một câu trả lời. Ngoài ra còn có bất kỳ dp được đề xuất? ví dụ tiêu chuẩn là: 100sw, 200sw, 400sw, 600sw.
Vince V.

19

Tôi nghĩ rằng đã quá muộn để trả lời về chủ đề này. Nhưng tôi muốn chia sẻ ý tưởng hoặc cách giải quyết vấn đề kích thước văn bản trên các thiết bị có độ phân giải khác nhau. Nhiều trang web dành cho nhà phát triển android gợi ý rằng chúng tôi phải sử dụng đơn vị sp cho kích thước văn bản, đơn vị này sẽ xử lý kích thước văn bản cho các thiết bị có độ phân giải khác nhau. Nhưng tôi luôn không thể có được kết quả mong muốn. Vì vậy, tôi đã tìm thấy một giải pháp mà tôi đang sử dụng từ 4-5 dự án gần đây nhất của mình và nó hoạt động tốt. Theo gợi ý của tôi, bạn phải đặt kích thước văn bản cho từng thiết bị có độ phân giải, đây là công việc hơi tẻ nhạt, nhưng nó sẽ đáp ứng yêu cầu của bạn. Mỗi nhà phát triển phải lắng nghe về tỷ lệ như 4: 6: 8: 12 (h: xh: xxh: xxxh tương ứng) . Bây giờ bên trong thư mục res dự án của bạn, bạn phải tạo 4 thư mục với tệp kích thước, ví dụ:

  1. res / giá trị-hdpi / kích thước.xml
  2. res / values-xhdpi /mens.xml
  3. res / values-xxhdpi /mens.xml
  4. res / giá trị-xxxhdpi / kích thước.xml

Bây giờ bên trong tệpmens.xml, bạn phải đặt các kích thước văn bản. Tôi đang hiển thị cho bạn mã cho các giá trị-hdpi , tương tự như vậy, bạn phải đặt mã cho các giá trị độ phân giải khác / tệpmens.xml.

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <dimen name="text_size">4px</dimen>
</resources>

Đối với các độ phân giải khác, nó giống như xhdpi : 6px, xxhdpi : 8px, xxxhdpi : 12px. Điều này được tính với tỷ lệ (3: 4: 6: 8: 12) mà tôi đã viết ở trên. Hãy thảo luận về ví dụ kích thước văn bản khác với tỷ lệ trên. Nếu bạn muốn lấy kích thước văn bản là 12px ở hdpi, thì ở độ phân giải khác, nó sẽ là

  1. hdpi: 12px
  2. xhdpi: 18px
  3. xxhdpi: 24px
  4. xxxhdpi: 36px

Đây là giải pháp đơn giản để triển khai kích thước văn bản cần thiết cho tất cả các độ phân giải. Tôi không xem xét các thiết bị phân giải giá trị-mdpi ở đây. Nếu bất kỳ ai muốn bao gồm kích thước văn bản cho độ phân giải này thì tỷ lệ sẽ giống như 3: 4: 6: 8: 12 . Trong bất kỳ câu hỏi xin vui lòng cho tôi biết. Hy vọng nó sẽ giúp bạn mọi người ra ngoài.


4
Việc sử dụng px thay vì sp trong kích thước văn bản không phải là một thực tiễn tồi? Có cách nào để đạt được tỷ lệ sau bằng cách sử dụng sp thay vì px không?
Red M

Tôi đã kiểm tra điều này đang hoạt động tốt, nhưng tôi vẫn bối rối liệu có nên sử dụng các giá trị bằng px thay vì dp / sp không? Tôi chưa bao giờ thấy ở đâu đó từ tài liệu chính thức để sử dụng các giá trị bằng px.
shaby 29/1218

1
sử dụng sp cho cỡ chữ, đó là luật. Phương pháp mà Rahul chỉ ra là đúng, chỉ cần sử dụng sp thay vì px.
Mihir Patel

sp nên được sử dụng nếu bào để liên kết kích thước phông chữ ứng dụng với kích thước phông chữ hệ thống. Ngoài ra, giải pháp này cũng không tồi.
Irfan Ul Haq

12

Đôi khi, tốt hơn là chỉ có ba lựa chọn

 style="@android:style/TextAppearance.Small"

Sử dụng kích thước nhỏ và lớn để phân biệt với kích thước màn hình bình thường.

<TextView
            android:id="@+id/TextViewTopBarTitle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            style="@android:style/TextAppearance.Small"/>

Đối với bình thường, bạn không phải chỉ định bất cứ điều gì.

<TextView
            android:id="@+id/TextViewTopBarTitle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>

Sử dụng điều này, bạn có thể tránh thử nghiệm và chỉ định kích thước cho các kích thước màn hình khác nhau.


10

Tôi đã làm tương tự theo thứ nguyên và vẽ một cái gì đó như (với dp nhưng chỉ cho văn bản và trong drawText ())

XML:

   <dimen name="text_size">30sp</dimen>

Mã:

   Paint p =new Paint();
       p.setTextSize(getResources().getDimension(R.dimen.text_Size));

8
Bạn KHÔNG nên sử dụng dpcho kích thước văn bản ... hãy sử dụng spthay thế.
Yousha Aleayoub 14/09/16

xin vui lòng sử dụng sp cho kích thước văn bản
Thinsky

Bạn có thể sử dụng dp trong các tình huống cụ thể khi bạn không muốn nó thay đổi kích thước dựa trên sở thích của người dùng.

7

Mọi người đều có thể sử dụng thư viện android được đề cập dưới đây, đây là cách dễ nhất để làm cho kích thước văn bản tương thích với hầu hết các màn hình thiết bị. Nó thực sự được phát triển trên cơ sở các bộ định cấu hình Android mới cho kích thước màn hình (được giới thiệu trong Android 3.2) swdp SmallestWidth.

https://github.com/intuit/sdp


2
sdp là kích thước màn hình; sử dụng ssp cho kích thước văn bản
ecle

Công trình này đối với tôi, nhưng tôi nghi ngờ có quá nhiều file để thêm, điều này sẽ làm tăng kích thước của ứng dụng, bạn có thể thay đổi kích thước @Muhammad và thêm chỉ lớp học bất cứ điều gì cần
Kirtikumar A.

1

Nếu bạn có API 26 thì bạn có thể cân nhắc sử dụng autoSizeTextType :

<Button
  app:autoSizeTextType="uniform" />

Cài đặt mặc định cho phép tự động định kích thước của TextView chia tỷ lệ đồng nhất trên các trục ngang và dọc.

https://developer.android.com/guide/topics/ui/look-and-feel/autosizing-textview


Vấn đề với điều này là nó không thay đổi đồng nhất kích thước văn bản cho nhiều chế độ xem văn bản với Chuỗi có độ dài khác nhau
Sourabh S Nath

0

Tôi nghĩ bạn có thể lưu trữ bằng cách thêm nhiều tài nguyên bố cục cho mỗi kích thước màn hình, ví dụ:

res/layout/my_layout.xml             // layout for normal screen size ("default")
res/layout-small/my_layout.xml       // layout for small screen size with small text
res/layout-large/my_layout.xml       // layout for large screen size with larger text
res/layout-xlarge/my_layout.xml      // layout for extra large screen size with even larger text
res/layout-xlarge-land/my_layout.xml // layout for extra large in landscape orientation

Tham khảo: 1. http://developer.android.com/guide/practices/screens_support.html


2
Sử dụng res / giá trị-nhỏ có thể tốt hơn.
einverne

1
một trong những cách triển khai kém hơn. chúng ta phải duy trì 5 bố cục chỉ để hỗ trợ các kích thước khác nhau?
SolidSnake

Tạo các bố cục khác nhau để chỉ giảm kích thước văn bản trong các màn hình biến thể thực sự là một ý tưởng tồi. Tôi không khuyên bạn điều đó
Saman Salehi

0

Để thống nhất tất cả các màn hình để hiển thị các kích thước phần tử giống nhau bao gồm cả kích thước phông chữ: - Thiết kế giao diện người dùng trên một kích thước màn hình với bất kỳ kích thước nào bạn thấy phù hợp trong quá trình thiết kế, tức là kích thước phông chữ TextView là 14dp trên kích thước màn hình mặc định với 4'6 inch.

  • Lập trình tính toán kích thước màn hình vật lý của điện thoại khác, tức là 5'2 inch của điện thoại / màn hình khác.

  • Sử dụng công thức để tính phần trăm chênh lệch giữa 2 màn hình. tức là sự khác biệt% giữa 4'6 và 5'2.

  • Tính toán sự khác biệt pixel giữa 2 TextView dựa trên công thức trên.

  • Nhận kích thước thực tế (tính bằng pixel) của kích thước phông chữ TextView và áp dụng chênh lệch pixel (bạn đã tính trước đó) cho kích thước phông chữ mặc định.

Với cách này, bạn có thể áp dụng tỷ lệ khung hình động cho tất cả các kích thước màn hình và kết quả là tuyệt vời. Bạn sẽ có bố cục và kích thước giống hệt nhau trên mỗi màn hình.

Lúc đầu có thể hơi phức tạp nhưng hoàn toàn đạt được mục tiêu khi bạn tìm ra công thức. Với phương pháp này, bạn không cần phải tạo nhiều bố cục chỉ để phù hợp với các kích thước màn hình khác nhau.


0

Bạn cũng có thể sử dụng weightSumvà thuộc layout_weighttính để điều chỉnh màn hình khác nhau của mình.

Để làm được điều đó, bạn phải tạo android:layout_width= 0dp và android:layout_width= (bất cứ thứ gì bạn muốn);



-2

Đừng mã hóa các kích thước.

Để có độ phân giải màn hình mới, quảng cáo linh hoạt - cách tốt nhất là đặt TextView giả vào bố cục để có được textSize:

<TextView
        android:id="@+id/dummyTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="gone"
        android:text="TextView" />

Và trong mã của bạn, ví dụ:

TextView testTextView = (TextView) rootView.findViewById(R.id.dummyTextView);
float textSize = testTextView.getTextSize();

Giữ textSizenhư một tham chiếu mà bạn có thể thêm kích thước không đổi hoặc điện áp (bằng cách tính toán).

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.