0

テキストサイズのオプションを提供していますが、そのうちの1つはEditTextボックス用です。を使用して元のテキストサイズを決定しましたEditText#getTextSize()。結果はピクセル単位で表示されます。ユーザーがテキストサイズを選択したら、私はテキストサイズedittext.setTextSize(TypedValue.COMPLEX_UNIT_SP, chosen)を適用するために使用します。

問題は、画面サイズが異なると、テキストサイズが大きく異なることです。たとえば、ICS電話では、 EditText.getTextSize()36が返されます。これは絶対に大きく、システム全体で使用されるデフォルトのテキストサイズではありません。

私は何が間違っているのですか?

4

1 に答える 1

2

画面密度の違いと、getTextSize() から取得する値がピクセル (px) 単位であるため、おそらく異なる値が表示されます。Density Independent Pixels(dp) と Scaled Pixels(sp) は、画面密度に依存しないように調整されており、これらを使用する必要があります。px から dp または sp を取得するには、次のような単純な変換を使用できます。

public static float pxToDp( float px, Context context ) {
    Resources resources = context.getResources();
    DisplayMetrics metrics = resources.getDisplayMetrics();
    float dp = px / ( metrics.densityDpi / 160f );
    return dp;
}

またはこれ(この投稿から取ったもの):

public static float pixelsToSp(Context context, Float px) {
    float scaledDensity = context.getResources().getDisplayMetrics().scaledDensity;
    return px/scaledDensity;
}
于 2012-07-23T00:01:06.870 に答える