簡體   English   中英

文本大小、不同密度設備和材料設計

[英]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 實際上根據屏幕像素密度和系統所選字體大小進行縮放。

您面臨的問題與屏幕的實際寬度有關。

要實現您想要的,您可以嘗試以下兩種方法之一:

  • 對於每個屏幕寬度,您的尺寸具有不同的 sp 值。 您可以通過創建額外的資源文件來做到這一點,這些資源文件將包含您的尺寸值並且取決於屏幕寬度。 您可以在此處閱讀有關此內容的更多信息:

https://developer.android.com/training/multiscreen/screensizes#TaskUseSWQuali

  • 使用自動調整大小的 TextView。 您可以在這里找到更多信息:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM