Javaコードを使用してTextView
の特定のテキストサイズを変更する整数値を割り当てると、値はピクセル(px
)として解釈されます。
誰でもsp
でそれを割り当てる方法を知っていますか?
http://developer.Android.com/reference/Android/widget/TextView.html#setTextSize%28int,%20float%29
例:
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 65);
DisplayMetrics
オブジェクトを使用して、 scaledDensity
属性 を使用してピクセルとスケーリングされたピクセルを変換できます。
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
pixelSize = (int)scaledPixelSize * dm.scaledDensity;
よりクリーンで再利用可能なアプローチは
dimens.xml
ディレクトリ内のres/values/
ファイルでテキストサイズを定義します。
</resources>
<dimen name="text_medium">14sp</dimen>
</resources>
TextView
に適用します:
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, context.getResources().getDimension(R.dimen.text_medium));
setTextSize
のソースコードに基づく:
public void setTextSize(int unit, float size) {
Context c = getContext();
Resources r;
if (c == null)
r = Resources.getSystem();
else
r = c.getResources();
setRawTextSize(TypedValue.applyDimension(
unit, size, r.getDisplayMetrics()));
}
ピクセルの寸法を計算するこの関数を作成します。
int getPixels(int unit, float size) {
DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
return (int)TypedValue.applyDimension(unit, size, metrics);
}
UnitはTypedValue.COMPLEX_UNIT_SP
のようなものです。
デフォルトでは、単位なしのsetTextSizeはSP(ピクセルのスケール)で機能します
public void setTextSize (float size)
Added in API level 1
Set the default text size to the given value, interpreted as "scaled pixel" units. This
size is adjusted based on the current density and user font size preference.
@John Leeheyと@PeterHに感謝します。
desiredSp = getResources().getDimension(R.dimen.desired_sp);
density = getResources().getDisplayMetrics().density;
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, desiredSp / density);
問題は、dimen.xmlでR.dimen.desired_spを25に定義すると
受け入れられた答えが機能しない場合(たとえば、ペイントを扱う場合)、次を使用できます。
float spTextSize = 12;
float textSize = spTextSize * getResources().getDisplayMetrics().scaledDensity;
textPaint.setTextSize(textSize);
semeTextView.setTextSize(TypedValue.COMPLEX_UNIT_PX,
context.getResources().getDimension(R.dimen.text_size_in_dp))
これはPXからSP形式に変換するためのコードです。 100%作品
view.setTextSize(TypedValue.COMPLEX_UNIT_PX, 24);
APIレベル1から public void setTextSize (float size)
メソッドを使用できます。
ドキュメントから:
デフォルトのテキストサイズを、「スケーリングされたピクセル」単位として解釈される指定された値に設定します。このサイズは、現在の密度とユーザーフォントサイズの設定に基づいて調整されます。
パラメーター:size-> float:スケーリングされたピクセルサイズ。
だからあなたは簡単に行うことができます:
textView.setTextSize(12); // your size in sp
すべてのソリューションを試してみて、許容できる結果が得られない場合(おそらく、デフォルトの非常に大きなフォントを使用するデバイスで作業していたため)、次のように動作しました(COMPLEX_UNIT_DIP = Device Independent Pixels):
textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14);