web-dev-qa-db-ja.com

Android:さまざまな画面解像度でのCanvas.drawText()テキストサイズ

Androidゲームの場合、Canvas.drawText()をいくつか呼び出します。

テストでは、正常に動作しているように見える標準のフォントサイズを使用します。

ただし、解像度を高くして密度を上げると、大きな画像が自動的に読み込まれますが、テキストは非常に小さくなります。

テキストを描画するサイズを簡単に計算する方法はありますか、または手動で計算する必要がありますか?

編集: 投稿の編集 @Suragchの目的は何でしたか?

34
twig

最も簡単な方法は、スケールに依存しないピクセル(sp)の単位を使用して、リソース内のフォントサイズを定義することです。この単位は、画面の密度を考慮に入れるという点で、密度に依存しないピクセル(dpまたはdip)に似ていますが、ユーザーのフォントサイズ設定を考慮に入れてください。

新しいディメンションを追加するには、dimens.xmlフォルダーにres/valuesファイルを作成し、次のコードを入力して、myFontSizeという名前の新しいディメンションを追加します。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="myFontSize">20sp</dimen>
</resources>

次に、アプリケーションでテキストサイズを取得できます

int scaledSize = getResources().getDimensionPixelSize(R.dimen.myFontSize);

結果のサイズは、現在の画面密度とフォントサイズ設定を考慮に入れるために正しくスケーリングされます。

詳細については Android開発者のページ(詳細情報) を参照してください。

80
Joseph Earl

最も簡単な方法は、scale-independent pixel (sp)またはdensity-independent pixel (dp)の単位でリソースディレクトリにフォントサイズを定義することです。次に、使用してテキストサイズを取得します

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

これにより、現在の画面密度/解像度とユーザーのフォントサイズ設定に従って、テキストサイズが適切にスケーリングされます。

リソースディレクトリでフォントサイズを定義する方法

dimens.xmlフォルダーにres->valuesという名前のファイルを作成します。次に、次のコードをコピーします。

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

タグ<dimen>name属性がリソースIDとして使用されます。

4
Trung

簡単な数学演算を使用して自分で行うことができます。

キャンバスサイズと同じサイズのテキストを描画する関係を計算する必要があるため、次のように実際のキャンバスサイズを使用します。

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

しかし、その数は大きすぎるので、ニーズに合った数で割ります。250としましょう。

relation = relation / 250;

これで、テキストサイズを次のように設定できます。

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

関係を任意の数で除算する必要はありませんが、その場合、変数myFontSizeに非常に小さいフォントサイズを使用する必要があります。私の場合、250は正常に機能し、通常のフォントサイズを使用して任意の画面サイズに調整します。既にキャンバスからピクセル数をカウントしているためです。

4
Camilo Ortegón

Canvas.drawText() を呼び出すと、テキストサイズは最初に渡されたPaintオブジェクトによって決定されます。これは Paint.setTextSize()で設定できます 。テキストサイズは、キャンバス密度に基づいてCanvasによって自動的にスケーリングされます。キャンバス密度は Canvas.getDensity() を使用して見つけることができます。

Canvasに描画されるPaintオブジェクトのテキストサイズを設定するときは、dpまたはspの単位値を使用して、Canvasにスケーリングを処理させます。

1
Tanner Perrien