2011-03-20 136 views
29

對於我的Android遊戲,我有一些撥打電話Canvas.drawText()Android:Canvas.drawText()在不同屏幕分辨率下的文字大小

爲了測試,我使用標準字體大小似乎工作正常。

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

是否有一種簡單的方法來計算文本應該繪製在什麼尺寸或我必須手動執行此操作?

編輯:什麼是editing my post @Suragch的要點?

+0

嘗試使用[scaledDensity](http://developer.android.com/reference/android/util/DisplayMetrics.html#scaledDensity)? – 2011-03-20 12:10:02

+0

嗨Marcin,是的,我已經使用過,乘數似乎沒有太大的作用。據我所知,我也正在使用正確的乘法邏輯。 – twig 2011-03-21 23:32:04

回答

75

最簡單的方法是將帶有刻度無關的像素的(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 Developers page on More Resources

+0

有趣的方法,我一定會嘗試,當我有機會。 – twig 2011-03-21 23:33:23

+0

謝謝約瑟夫,就像一個魅力。我必須承認,我將它應用於錯誤的Paint對象,並在很久以後才意識到。 Marcin的解決方案也可以很好地工作。 – twig 2011-03-22 08:56:57

+0

約瑟夫,你是說ADD R.dimen.font_size並將其設置爲20sp爲例。那麼通過調用這個20sp將被自動縮放到任何屏幕?或者我們是否必須爲每個屏幕資源添加一些font_size尺寸? – HGPB 2012-07-17 11:44:24

4

最簡單的方法是在資源目錄中定義字體大小,單位爲scale-independent pixel (sp)density-independent pixel (dp)。然後得到使用

int scaledSize = getResources().getDimensionPixelSize(R.dimen.font_size); 
mTextView.setTextSize(scaledSize); 

這將相應地根據當前屏幕密度/分辨率和用戶的字體大小設置縮放文字大小的文字大小。

如何在資源目錄中定義字體大小?

在文件夾res->values中創建一個名爲dimens.xml的文件。然後複製下面的代碼。

<resources> 
    <dimen name="font_size">25sp</dimen> // sp or dp accordingly 
</resources> 

標籤<dimen>name屬性將被用作資源ID。

+1

http://developer.android.com/guide/topics/resources/more-resources.html#Dimension 我明白了。 – Trung 2011-06-23 07:17:13

1

當調用Canvas.drawText()時,文本大小首先由在Paint對象中傳入的值確定,可通過Paint.setTextSize()進行設置。文字大小將根據畫布密度自動縮放Canvas,可以使用Canvas.getDensity()找到。

當在畫布上繪製的繪畫對象上設置文本大小時,請使用單位值dpsp,並讓Canvas處理縮放。

你需要計算吸引你的文字一樣的大小,任何畫布大小的關係,所以用實際的畫布大小,像這樣:

0

你可以用一個簡單的數學運算自己做

double relation = Math.sqrt(canvas.getWidth() * canvas.getHeight()); 

但這個數字僅僅是太大,所以由一個適合您的需要將其劃分,可以說250:

relation = relation/250; 

現在,您可以設置文字大小是這樣的:

paint.setTextSize((float) (myFontSize * relation)); 

您不必通過任何必要的鴻溝關係,但在這種情況下,你將不得不使用非常小的字體大小可變myFontSize。對於我來說,250個作品可以很好地使用常規字體大小,可以適應任何屏幕大小,因爲您已經在計算畫布中的像素尺寸。