dポイントプレゼントキャンペーン実施中!

Androidではフォントサイズを指定するときにspを使いますが、
例えば横幅768ピクセルの端末に幅いっぱい30文字等幅で表示する場合はspの計算をどのようにすればいいのでしょうか。
スケール(dpi)は2.0の端末になります。
同じく、横幅480ピクセル、dpiが1.5の端末に30文字等幅で表示する場合も同様に計算できるでしょうか。
表示はTextViewではなく、paintで行ないます。

A 回答 (1件)

これは、単純計算ではむずかしいんじゃないでしょうか。

フォントによって大きさが違いますので……。等幅であっても、フォントによって同じフォントサイズでも横幅は異なります。

paintでテキストを描画する場合、描画属性を管理するPaintオブジェクトに横幅を得るためのmeasureTextというメソッドがあります。これを使い、そのPaintを利用してテキストを描く際の横幅が得られます。こんな感じです。

Paint paint = new Paint( Paint.ANTI_ALIAS_FLAG);
paint.setTextSize( 24); // サイズ
paint.setColor( Color.BLACK); // 色
float width = paint.measureText( "Hello" ); // テキストの幅を得る

ですので、テキストサイズを適当に設定して横幅を調べ、その値によってまたテキストサイズを変更して横幅を調べ……というようにして、描画するViewの横幅とほぼ同じになる(実際にはプラスマイナスいくつ以内、という感じになるでしょう)Paintを作成して描画する、という感じになるでしょう。

後は、まぁ考え方を切り替えて、あらかじめテキストを描いたイメージを用意し、それを指定した領域内に変形して描画してしまうという手もありますね。
    • good
    • 0
この回答へのお礼

一度描画するふりをして幅を計算しなければいけないのですね。
フォントによって横幅が異なるということがそもそもの原因、ということは機種によっても異なるということなのですね。
measureTextは知らなかったのでとても参考になりました。
変形して描画するというのも非常にいい手ですね。

ありがとうございました!

お礼日時:2012/11/29 09:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!