Android デバイスの解像度に応じてテキストを動的にスケーリングする Android アプリがあります。Android シミュレータで事前定義されたすべての解像度でこのコードをテストしましたが、コードは正常に動作します。(これには、HTC Desire および Motorola Droid と同じ解像度が含まれます)
HTC Wildfire でも問題なく動作します。
シミュレーターのスクリーン ショットを次に示します。
ただし... HTC Desire でこれを試してみたところ、Motorola Droid を使用しているユーザーから、フォントが正しくスケーリングされていないという報告がありました。
テキストが切り落とされていることに注意してください。
これらの特定のデバイスでこれが機能しない理由はありますか?
私は現在、テキストの利用可能な高さに応じてテキストを縮小する関数を持っています...次のようなものです:
public static float calculateHeight(FontMetrics fm) {
return Math.abs(fm.ascent) + fm.descent;
}
public static int determineTextSize(Typeface font, float allowableHeight) {
Paint p = new Paint();
p.setTypeface(font);
int size = (int) allowableHeight;
p.setTextSize(size);
float currentHeight = calculateHeight(p.getFontMetrics());
while (size!=0 && (currentHeight) > allowableHeight) {
p.setTextSize(size--);
currentHeight = calculateHeight(p.getFontMetrics());
}
if (size==0) {
System.out.print("Using Allowable Height!!");
return (int) allowableHeight;
}
System.out.print("Using size " + size);
return size;
}
これがいくつかのデバイスでのみ発生する理由は何ですか? どうすれば修正できますか?ここで検討する必要がある、私が知らない別のフォントメトリックはありますか? スケールや DPI が好きですか?
ありがとう。