プロジェクトでテキストを描画canvas.drawText(...)
し、さまざまなデバイスでテストしました。
ただし、テキストのサイズは画面ごとに大きく異なります。
私はそれを掛けようとしましgetResources().getDisplayMetrics().density
たが、それらはまだ同じサイズではありません.
異なるデバイスでテキストを同じサイズにする方法はありますか?
プロジェクトでテキストを描画canvas.drawText(...)
し、さまざまなデバイスでテストしました。
ただし、テキストのサイズは画面ごとに大きく異なります。
私はそれを掛けようとしましgetResources().getDisplayMetrics().density
たが、それらはまだ同じサイズではありません.
異なるデバイスでテキストを同じサイズにする方法はありますか?
こんにちは、この投稿http://catchthecows.com/?p=72をご覧ください。役立つと思います。@Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh);
// save view size
mViewWidth = w;
mViewHeight = h;
// first determine font point size
adjustTextSize();
// then determine width scaling
// this is done in two steps in case the
// point size change affects the width boundary
adjustTextScale();
}
void adjustTextSize() {
mTextPaint.setTextSize(100);
mTextPaint.setTextScaleX(1.0f);
Rect bounds = new Rect();
// ask the paint for the bounding rect if it were to draw this
// text
mTextPaint.getTextBounds(mText, 0, mText.length(), bounds);
// get the height that would have been produced
int h = bounds.bottom - bounds.top;
// make the text text up 70% of the height
float target = (float)mViewHeight*.7f;
// figure out what textSize setting would create that height
// of text
float size = ((target/h)*100f);
// and set it into the paint
mTextPaint.setTextSize(size);
}
void adjustTextScale() {
// do calculation with scale of 1.0 (no scale)
mTextPaint.setTextScaleX(1.0f);
Rect bounds = new Rect();
// ask the paint for the bounding rect if it were to draw this
// text.
mTextPaint.getTextBounds(mText, 0, mText.length(), bounds);
// determine the width
int w = bounds.right - bounds.left;
// calculate the baseline to use so that the
// entire text is visible including the descenders
int text_h = bounds.bottom-bounds.top;
mTextBaseline=bounds.bottom+((mViewHeight-text_h)/2);
// determine how much to scale the width to fit the view
float xscale = ((float) (mViewWidth-getPaddingLeft()-getPaddingRight())) / w;
// set the scale for the text paint
mTextPaint.setTextScaleX(xscale);
}
@Override
protected void onDraw(Canvas canvas) {
// let the ImageButton paint background as normal
super.onDraw(canvas);
// draw the text
// position is centered on width
// and the baseline is calculated to be positioned from the
// view bottom
canvas.drawText(mText, mViewWidth/2, mViewHeight-mTextBaseline, mTextPaint);
}
これは何だ
getResources()。getDisplayMetrics()。density
密度の異なる同じ画面サイズでも同じように見えるということです。あなたの動きに感謝します。
あなたの問題には2つの解決策があります。1. Large、xlarge、および通常のレイアウトを試してください。均等に見えるように、それぞれのレイアウトに応じてそれらを調整します。
Paint クラスは、テキスト サイズをピクセル単位で受け取ります。テキストを直接描画する場合は、paint.setTextSize(float size) を呼び出す前に単位変換を処理する必要があります。常に sp または dp 単位を使用し、小さい画面、通常の画面、大きい画面、特大画面用に少なくとも個別の dimens.xml リソースを含めることができます。
Canvas.drawText()
テキストサイズを呼び出すと、渡されたPaint
オブジェクトによって最初に決定されます。これは、 で設定できますPaint.setTextSize()
。Canvas
テキスト サイズは、キャンバスの密度に基づいて自動的にスケーリングされます。これは、 を使用して確認できますCanvas.getDensity()
。
Canvas に描画されるペイント オブジェクトのテキスト サイズを設定する場合は、dp
またはの単位値を使用sp
して、Canvas にスケーリングを処理させます。
もちろん、画面サイズに応じて異なる値を指定する必要があるかもしれません:複数画面のサポート