[英]Text sizes, different density devices and material design
當涉及到 fonts 時,我正在盡力遵循材料設計指南,但我正在努力解決我遇到的問題,而無需使用依賴於密度的尺寸。 我的問題是;
我正在為我的 fonts 使用 styles ,這是一個例子;
<style name="Text.MyApp.Heading3" parent="TextAppearance.MaterialComponents.Headline3">
<item name="android:fontFamily">?attr/RegularFont</item>
<item name="fontFamily">?attr/RegularFont</item>
<item name="android:textSize">?attr/TextSizeHeadingThree</item>
</style>
並將其用作文本的樣式,我的字體大小來自材料指南,因此對於標題 4 我有
<dimen name="text_size_heading_three">48sp</dimen>
我的問題是,我有一個視圖,屏幕上連續使用 Heading3 的兩個數字,這可能看起來像+£100.00 | -£200.00
+£100.00 | -£200.00
,這些限制在中間的分隔視圖中。
我的問題出在 Pixel 4 XL (xx-hdpi) 上,這看起來不錯,但是將其放到 Nexus S (hdpi) 上,文本會擠壓在一起,與中間的分隔符重疊,並略微脫離屏幕末端.
我對使用 SP 的理解是,它會縮放這個似乎沒有發生的文本大小,還擔心 SP 從用戶的文本大小偏好中獲取,因此可能會增加設備的文本大小也打破這個。
只需將此文本視圖的 hdpi 字體大小更改為較小的文本大小,有沒有辦法可以使這種樣式隨屏幕縮放?
sp 實際上根據屏幕像素密度和系統所選字體大小進行縮放。
您面臨的問題與屏幕的實際寬度有關。
要實現您想要的,您可以嘗試以下兩種方法之一:
https://developer.android.com/training/multiscreen/screensizes#TaskUseSWQuali
https://developer.android.com/guide/topics/ui/look-and-feel/autosizing-textview
sp
單位實際上是關於用戶選擇的文本大小:
Scale-independent Pixels - 這類似於 dp 單位,但它也根據用戶的字體大小偏好進行縮放。 建議您在指定字體大小時使用此單位,以便根據屏幕密度和用戶偏好進行調整。
基本上,用戶可以在他們的設備上選擇文本的一般大小,並將dp
值乘以特定因子(正常是* 1.0
,我認為 Huge 是* 2.0
),這就是sp
值。 當您在sp
中指定大小時,您允許系統放大該文本,以便所有人都能閱讀。
因此,您在設計時需要注意這一點 - 始終值得擁有一個小屏幕(有限空間)的模擬器並將文本大小設置為最大設置,以確保一切仍然適合那些極端情況。
我認為你有四個選擇:
sp
大小,使其始終適合TextView
的大小,就像@kandrit 提到的那樣 - 設置你想要填充的空間,它會縮放文本大小以適應它(這聽起來像你所期望的,你可以調整一些東西,比如擁有一組固定的可能大小)sp
,而是使用dp
(不會根據用戶的喜好進行縮放 - 但超過一定大小,它不需要,因為它是可讀的) 您會收到關於最后一個警告的警告,但在我看來,這完全沒問題,並且在某些情況下是正確的做法。 想想一個在屏幕中間有一個時鍾的應用程序——它是固定大小的,設計和布局都以某種方式進行,而且它足夠大,易於閱讀。 它旨在以特定方式顯示,占據屏幕的特定區域,並且無需更改大小 - 因此在dp
中定義它就像任何其他視覺元素一樣有意義。 也許這適用於您正在做的事情!
問題不在於您的文字大小,而在於您的布局設計
我也有類似的問題,我通過為放置在約束布局內的視圖提供邊距來解決它,因此在大屏幕的情況下,它將使用約束並忽略邊距的值,在小屏幕的情況下,它使用邊距的值保持視圖分開
如果您使用的是線性布局,則將 layout_weight 設置為 1 並為視圖提供邊距,那么它將與約束布局一樣工作
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.