[英]Android: Canvas.drawText() text size on different screen resolutions
最簡單的方法是使用與比例無關的像素( sp
)單位定義資源中的字體大小-該單位類似於密度無關的像素( dp
或dip
),因為它考慮了屏幕密度,但同時也考慮了考慮到用戶的字體大小設置。
要添加新維度,請在res/values
文件夾中創建dimens.xml
文件,然后輸入以下代碼以添加名為myFontSize
的新維度:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="myFontSize">20sp</dimen>
</resources>
然后,您可以使用來獲取應用程序中的文本大小
int scaledSize = getResources().getDimensionPixelSize(R.dimen.myFontSize);
考慮到當前的屏幕密度和字體大小設置,可以正確縮放最終的大小。
有關更多信息,請參見“ 更多資源”上的Android開發人員頁面 。
最簡單的方法是使用與scale-independent pixel (sp)
或與density-independent pixel (dp)
的單位在資源目錄中定義字體大小。 然后使用獲取文字大小
int scaledSize = getResources().getDimensionPixelSize(R.dimen.font_size);
mTextView.setTextSize(scaledSize);
這將根據當前的屏幕密度/分辨率和用戶的字體大小設置適當地縮放文本大小。
如何在資源目錄中定義字體大小?
在文件夾dimens.xml
res->values
創建一個名為dimens.xml
的文件。 然后復制以下代碼。
<resources>
<dimen name="font_size">25sp</dimen> // sp or dp accordingly
</resources>
標簽<dimen>
的name
屬性將用作資源ID。
您可以使用簡單的數學運算自己完成操作:
您需要計算一個關系,以將您的文本繪制成與任何畫布大小相同的大小,因此請使用實際的畫布大小,如下所示:
double relation = Math.sqrt(canvas.getWidth() * canvas.getHeight());
但是這個數字太大了,因此將其除以適合您需求的數字,可以說250:
relation = relation / 250;
現在,您可以像這樣設置文本大小:
paint.setTextSize((float) (myFontSize * relation));
您不必將其除以任何數字,但在這種情況下,必須為變量myFontSize
使用非常小的字體大小。 對我來說250可以正常使用可以適應任何屏幕尺寸的常規字體大小,因為您已經在計算畫布中的像素尺寸。
調用Canvas.drawText()
,文本大小首先由傳入的Paint
對象確定,可以通過Paint.setTextSize()
進行設置。 Canvas
根據畫布的密度自動縮放文本大小,可以使用Canvas.getDensity()
找到它。
在將在Canvas上繪制的繪畫對象上設置文本大小時,請使用dp
或sp
的單位值,並讓Canvas為您處理縮放比例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.