簡體   English   中英

Android:不同屏幕分辨率下的Canvas.drawText()文本大小

[英]Android: Canvas.drawText() text size on different screen resolutions

對於我的Android游戲,我對Canvas.drawText()進行了一些調用。

為了進行測試,我使用了似乎可以正常工作的標准字體大小。

但是,當我將分辨率提高到更高的密度時,會自動加載較大的圖像,但是文本現在很小。

是否有一種簡單的方法可以計算應以什么尺寸繪制文本,或者我必須手動執行此操作?

編輯: 編輯我的 @Suragch 帖子有什么意義?

最簡單的方法是使用與比例無關的像素( sp )單位定義資源中的字體大小-該單位類似於密度無關的像素( dpdip ),因為它考慮了屏幕密度,但同時也考慮了考慮到用戶的字體大小設置。

要添加新維度,請在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上繪制的繪畫對象上設置文本大小時,請使用dpsp的單位值,並讓Canvas為您處理縮放比例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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