私はgalaxy tab 1、7inch hdpiとgalaxy tab plus、7インチhdpiを使用していますが、解像度が高く、私のアプリケーションではgalaxy tabでテキストを読むことができますが、galaxy tabでは小さすぎます。フォントサイズとレイアウトサイズでspを使用しています。何か案が?ありがとう
これは、プログラムでサイズを設定する場合に役立ちます。テキストは各デバイスで同じサイズで表示されます
TextView text = new TextView(this);
text.setText("text");
text.setTextSize(16 * getResources().getDisplayMetrics().density);
ハードウェア仕様では、Galaxy Tab 1はMDPIデバイスですが、Android 2.x SamsungがHDPIリソースを使用するようにプログラムで設定しているため、次のようにすることをお勧めします。
values
ディレクトリにファイルdimens.xml
を作成します。<dimen name="font_size">30sp</dimen>
を配置します。これはデフォルトのフォントサイズです。dimens.xml
ディレクトリにファイルvalues-large
を作成します。<dimen name="font_size">20sp</dimen>
を配置します。これはgalaxy tab 1のフォントサイズです。dimens.xml
ディレクトリにファイルvalues-sw600dp
を作成します。<dimen name="font_size">30sp</dimen>
を配置します。これは、Android 3.x以降のその他のタブレットのフォントサイズです。Android:textSize="@dimens/font_size"
を指定しますあなただけのような密度や画面サイズに関連する異なるフォルダを作成する必要があります
オプション1
values-large
values-small
values-normal
詳細については、このリンクを確認してください...
オプション2。
mTextView.setTextSize(16 * getResources().getDisplayMetrics().density);
これにより、密度に応じてTextSizeが得られます。
(1)テキストに「dp」または「dip」を使用する方が、「sp」を使用するよりも優れていると思います。dp(密度ピクセル)は画面密度に応じて調整されるためです。したがって、高密度デバイスではテキストが大きく表示され、低密度デバイスではテキストが小さく表示されます。
(2)ORテキストサイズに「sp」を使用する場合は、デバイス密度を検出し、それに応じてテキストサイズを設定できます。
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
switch(displayMetrics.densityDpi){
case DisplayMetrics.DENSITY_LOW:
//set text-size for low-density devices.
break;
case DisplayMetrics.DENSITY_MEDIUM:
//set text-size for medium-density devices.
break;
case DisplayMetrics.DENSITY_HIGH:
//set text-size for high-density devices.
break;
}
これを試して:
このような
Android:textSize= "10sp"
sp
スケールに依存しないピクセル-これはdpユニットに似ていますが、ユーザーのフォントサイズの設定によってもスケーリングされます。フォントサイズを指定するときにこのユニットを使用することをお勧めします。そうすると、画面密度とユーザーの好みの両方に合わせて調整されます。
以下のコードは、ユーザーのシステムフォントサイズ設定を使用して、textViewのフォントサイズのスケーリングを調整します。
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getRealSize(size);
int screenWidth = size.x;
float fontscale = getResources().getConfiguration().fontScale;
float textSize = (screenWidth/ fontscale)/10;
Log.e(TAG, "textSize is: " + textSize);
yourTextView.setTextSize(TypedValue.COMPLEX_UNIT_SP, textSize);
画面の物理的なサイズに基づいてとして市場で this ディメンションのいずれかを使用できます。すべてのデバイスのテキストの物理サイズは同じです。
TextView headerTextView(String label){
TextView headerTextView = new TextView(this.context);
float scale = context.getResources().getDisplayMetrics().density;
if(scale > 2.0) {
headerTextView.setWidth(210);
headerTextView.setHeight(120);
headerTextView.setTextSize(17);
}
else {
headerTextView.setWidth(125);
headerTextView.setHeight(60);
headerTextView.setTextSize(21);
}
つまり、 スケーラブルDP および スケーラブルフォント のアプローチを使用できます。
Androidプロジェクト構造では、サポートされている画面サイズのdimens.xmlファイルで異なるフォントサイズ(SP)とマージン値(DP)を定義することにより、本質的に指定できます。しかし、まだ残っている問題は-使用する値は何ですか? UXデザイナーは通常、1つのセット(360x640 DP画面サイズなど)のみにスタイルガイドを提供し、サポートされている他のすべての画面サイズには対応していません。そのため、サポートされている他の画面サイズに適切な値を使用する問題は未解決のままです。
1つの良い解決策は(私の理解では)、既製のスケーラブルなdimens.xmlファイルの辞書を使用することです。これは、 this ライブラリで提供されるファイルの辞書に似ています。これらのxmlファイルをプロジェクトに追加した後、レイアウトでキーを使用するだけで、Androidはそれぞれのディレクトリのフォント/マージン値を自動的に使用します。 here を参照してください。視覚的な違いのために-このアプローチの有無にかかわらず。
textSizeの場合、Googleは「dp」の代わりに「sp」を使用することを提案しました
このリンクをchcek http://developer.Android.com/design/style/typography.html
複数の画面のフォントサイズをサポートするには、各画面サイズに新しいリソースを作成する必要があります http://developer.Android.com/guide/topics/resources/more-resources.html#Dimension
TextView tv = new TextView(context); tv.setText( "Hello World");
//値はスケーリングされたピクセル(SP)tv.setTextSize(TypedValue.COMPLEX_UNIT_SP、20f);
//値はデバイスに依存しないピクセル(DIP)tv.setTextSize(TypedValue.COMPLEX_UNIT_DIP、20f);
//値は未処理ピクセル(PX)tv.setTextSize(TypedValue.COMPLEX_UNIT_PX、20f);
//値はポイント(PT)であるtv.setTextSize(TypedValue.COMPLEX_UNIT_PT、20f);
//値はミリメートル(MM)ですtv.setTextSize(TypedValue.COMPLEX_UNIT_MM、20f);
//値はインチ(IN)であるtv.setTextSize(TypedValue.COMPLEX_UNIT_IN、20f);