113

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)

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

4

4 に答える 4

317

dimens.xmlにディメンションを追加します:

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

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

textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.text_medium));
于 2013-05-23T15:31:06.197 に答える
4

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

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

ただし、両方のテキストの実際のサイズを比較すると、同じである必要があります。

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

Androidの寸法について詳しくは、http://android4beginners.com/2013/07/appendix-c-everything-about-sizes-and-dimensions-in-android/をご覧ください。

于 2013-07-06T14:56:00.953 に答える
1

dpの代わりにsdp(スケーラブルなdesnsityピクセル)https://github.com/intuit/sdpを使用できます。これにより、間違いなくあなたの命を救うことができます。

于 2017-07-31T11:23:07.470 に答える
1

Kostekポーランドの回答を拡張するには、

テキストサイズが期待どおりに表示されない理由は、次の行にあるためです。

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

getDimensionPixelSize()は、「18sp」をピクセルサイズに変換するため、戻り値は18とは異なる値になります。たとえば、メソッドが23の値を返すとします。したがって、この行が実行されると、次のようになります。

textView.setTextSize(size)

このメソッドはテキストサイズを23spに設定するため、テキストサイズは予想よりも大きく表示されます。

解決策は、テキストサイズを設定するときに、代わりにこの行を使用することです。

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

これが機能するのは、最初の引数が2番目の引数がピクセル型であることを示しているためです。したがって、2番目の引数が23の場合、23spのようには扱われませんが、代わりに23ピクセルを意味します。これは、18spと同等ですが、ピクセル単位です。

于 2021-04-14T05:52:37.423 に答える