web-dev-qa-db-ja.com

異なる解像度のテキストサイズ

私はgalaxy tab 1、7inch hdpiとgalaxy tab plus、7インチhdpiを使用していますが、解像度が高く、私のアプリケーションではgalaxy tabでテキストを読むことができますが、galaxy tabでは小さすぎます。フォントサイズとレイアウトサイズでspを使用しています。何か案が?ありがとう

14
colymore

これは、プログラムでサイズを設定する場合に役立ちます。テキストは各デバイスで同じサイズで表示されます

TextView text = new TextView(this);
text.setText("text");
text.setTextSize(16 * getResources().getDisplayMetrics().density);
33
Dr Glass

ハードウェア仕様では、Galaxy Tab 1はMDPIデバイスですが、Android 2.x SamsungがHDPIリソースを使用するようにプログラムで設定しているため、次のようにすることをお勧めします。

  1. valuesディレクトリにファイルdimens.xmlを作成します。
  2. そこに<dimen name="font_size">30sp</dimen>を配置します。これはデフォルトのフォントサイズです。
  3. dimens.xmlディレクトリにファイルvalues-largeを作成します。
  4. そこに<dimen name="font_size">20sp</dimen>を配置します。これはgalaxy tab 1のフォントサイズです。
  5. dimens.xmlディレクトリにファイルvalues-sw600dpを作成します。
  6. そこに<dimen name="font_size">30sp</dimen>を配置します。これは、Android 3.x以降のその他のタブレットのフォントサイズです。
  7. レイアウトでAndroid:textSize="@dimens/font_size"を指定します
19
vasart

あなただけのような密度や画面サイズに関連する異なるフォルダを作成する必要があります

オプション1

values-large
values-small
values-normal

詳細については、このリンクを確認してください...

複数画面のサポート

オプション2。

mTextView.setTextSize(16 * getResources().getDisplayMetrics().density);

これにより、密度に応じてTextSizeが得られます。

15
SilentKiller

(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; 
    } 
4
Yogesh Somani

これを試して:

このような

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);
2
Rick

画面の物理的なサイズに基づいてとして市場で this ディメンションのいずれかを使用できます。すべてのデバイスのテキストの物理サイズは同じです。

2
Jin35
2
bashu

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);
    }
1
yug

つまり、 スケーラブルDP および スケーラブルフォント のアプローチを使用できます。

Androidプロジェクト構造では、サポートされている画面サイズのdimens.xmlファイルで異なるフォントサイズ(SP)とマージン値(DP)を定義することにより、本質的に指定できます。しかし、まだ残っている問題は-使用する値は何ですか? UXデザイナーは通常、1つのセット(360x640 DP画面サイズなど)のみにスタイルガイドを提供し、サポートされている他のすべての画面サイズには対応していません。そのため、サポートされている他の画面サイズに適切な値を使用する問題は未解決のままです。

1つの良い解決策は(私の理解では)、既製のスケーラブルなdimens.xmlファイルの辞書を使用することです。これは、 this ライブラリで提供されるファイルの辞書に似ています。これらのxmlファイルをプロジェクトに追加した後、レイアウトでキーを使用するだけで、Androidはそれぞれのディレクトリのフォント/マージン値を自動的に使用します。 here を参照してください。視覚的な違いのために-このアプローチの有無にかかわらず。

0
birender

textSizeの場合、Googleは「dp」の代わりに「sp」を使用することを提案しました enter image description here

このリンクをchcek http://developer.Android.com/design/style/typography.html

複数の画面のフォントサイズをサポートするには、各画面サイズに新しいリソースを作成する必要があります http://developer.Android.com/guide/topics/resources/more-resources.html#Dimension

0
Fahriyal Afif

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);

0
Darkman