スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。



Paint.setTextSize()の謎

Paint.setTextSize()に12を指定してFontMetricsIntを取得した結果は以下のようになった。

Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setTextAlign(Paint.Align.LEFT);
paint.setTextSize(12);
paint.setColor(Color.WHITE);

// 結果
FontMetricsInt top              : -13
FontMetricsInt bottom           :   4
FontMetricsInt accent           : -11
FontMetricsInt descent          :   3
FontMetricsInt bottom - top     :  17
FontMetricsInt descent - accent :  14

FontMetrics top              : -12.574219
FontMetrics bottom           :  3.5859375
FontMetrics accent           : -10.675781
FontMetrics descent          :  3.3046875
FontMetrics bottom - top     :  16.160156
FontMetrics descent - accent :  13.980469

12を設定しても,テキストのサイズがpx単位で12になる箇所がない。
setTextSizeの引数はなんの単位なのだろうか???

もしかするとspなのかもしれないと思い
システムのフォントサイズを変更しても上記の値はかわらなかった。

システムのフォントを「モリサワ新ゴM」から「LC明朝」へ変更したら以下のようになった。

FontMetricsInt accent           : -11
FontMetricsInt descent          :   1
FontMetricsInt bottom - top     :  13
FontMetricsInt descent - accent :  12
FontMetrics top                 : -10.558594
FontMetrics bottom              :   1.359375
FontMetrics accent              : -10.558594
FontMetrics descent             :  1.4414063
FontMetrics bottom - top        :  11.917969
FontMetrics descent - accent    :  12.0

「LC明朝」では指定した12と一致したピクセルの高さになった。
フォントによってピクセル数が違うということがわかったはいいが,
以前setTextSizeに指定する値が何を表しているのか...。

まさか横幅!?

final float halfSize = paint.measureText("A");
final float size = paint.measureText("あ");

//結果「モリサワ新ゴM」
Font width. A:7.296875, あ:12.0

//結果「LC明朝」
Font width. A:7.296875, あ:12.0

//結果「SHクリスタルタッチ」
Font width. A:7.296875, あ:11.984375

//結果「Roboto Regular」
Font width. A:8.0, あ:12.0

SHクリスタルタッチもほぼ12。
他のフォントもほぼ12。

他の端末でもフォントの幅が12に近い値であれば,
幅の可能性が高いね。

ちなみにandroidのソースをみると

public native void setTextSize(float textSize);

nativeメソッドでした。

もし幅であわせて高さであわせないというならば,
以下のサイトのようにフォントをストレッチして12 x 12にフィットさせるしかなさそう。

http://wiki.livedoor.jp/moonlight_aska/d/%A5%C6%A5%AD%A5%B9%A5%C8%A5%B5%A5%A4%A5%BA%A4%F2%A4%AB%A4%A8%A4%EB

全角で12となると英語圏の人はどうなるのだろうか???
半角しかない世界では12の扱いって???

リファレンスに書かれていない以上,どうしようもない。
関連記事
スポンサーサイト



コメントの投稿

非公開コメント

アクセス
あなたは
キーワード
カテゴリー
最近の記事
リンク
月別アーカイブ
ブロとも申請フォーム

この人とブロともになる

WEB検索
Google

RSSフィード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。