XMLからディメンションを取得し、実行時にテキストサイズを設定する


101

dimens.xmlには、以下が含まれています。

<dimen name="text_medium">18sp</dimen>

実行時に、この値を取得して、テキストビューのテキストサイズを設定します。

int size = context.getResources().getDimensionPixelSize(R.dimen.text_medium);
textView.setTextSize(size).

10インチタブレット(1280 x 800)では、すべて問題ありません。しかし、電話(800 x 480)では、テキストビューのフォントが非常に大きくなります。タブレットでは、サイズは18です。電話では27です。

サイズを手動で設定した場合:

textView.setTextSize(size)

サイズは両方のデバイスで正常です。

回答:


297
<dimen name="text_medium">18sp</dimen>

コードでサイズを設定します。

textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.text_medium));

7
OPについては知りませんが、これが私が探していた答えでした。COMPLEX_UNIT_DPを使用していて、出力タイプではなく入力タイプを指定する必要があると考えていました。
HenryAdamsJr 2013年

フォントサイズ(spで定義)を取得すると60になります。OMPLEX_UNIT_PXを使用して設定し直して再度取得すると、70になります。すべてが明確ではないようです
Gleichmut

2
文字サイズについて、TypedValue.COMPLEX_UNIT_SP代わりに使用できないのはなぜですか?
dphans

3
@dphansこのResources.getDimension()メソッドは、適切なメトリックが既に乗算された値を返します
pkuszewski

2
@pkuszewskiうわー、それはとても混乱しています。
Big_Chair

4

getDimensionPixelSize()メソッドとgetDimension()メソッドはどちらも、画面密度を使用してピクセルを計算します。電話画面の密度は明らかにhdpi(240dpi)であるため、1.5スケールを使用してdpをspに変換します。単純な数学18 * 1.5 = 27。

タブレットの密度はmdpi(160dpi)なので、スケールは1:1です。

しかし、両方のテキストの実際のサイズを比較すると、同じになるはずです。

最良の方法は、2つのdimens.xmlファイルを作成することです。1つは電話のvaluesフォルダーに、もう1つはタブレットのvalues-sw600dpに作成します(values-sw720dp-landフォルダーを使用して、横向きの10インチタブレットの寸法を保存することもできます)。

Androidのディメンションについて詳しくは、http//android4beginners.com/2013/07/appendix-c-everything-about-sizes-and-dimensions-in-android/をご覧ください。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.