79

Android では、画面サイズを Normal Large XLarge などと定義しています。

適切なフォルダー内の静的リソースを自動的に選択します。Java コードで現在のデバイスに関するこのデータが必要です。DisplayMetrics は、現在のデバイス密度に関する情報のみを提供します。画面サイズに関しては何もありません。

ここでgrepコードでScreenSize列挙型を見つけましたが、 これは4.0 SDKでは利用できないようです。この情報を取得する方法はありますか?

4

15 に答える 15

123

このコードをコピーして に貼り付けます。Activity実行するとToast、デバイスの画面サイズ カテゴリになります。

int screenSize = getResources().getConfiguration().screenLayout &
        Configuration.SCREENLAYOUT_SIZE_MASK;

String toastMsg;
switch(screenSize) {
    case Configuration.SCREENLAYOUT_SIZE_LARGE:
        toastMsg = "Large screen";
        break;
    case Configuration.SCREENLAYOUT_SIZE_NORMAL:
        toastMsg = "Normal screen";
        break;
    case Configuration.SCREENLAYOUT_SIZE_SMALL:
        toastMsg = "Small screen";
        break;
    default:
        toastMsg = "Screen size is neither large, normal or small";
}
Toast.makeText(this, toastMsg, Toast.LENGTH_LONG).show();
于 2012-06-28T20:21:03.343 に答える
15

画面サイズの決定 :

int screenSize = getResources().getConfiguration().screenLayout &Configuration.SCREENLAYOUT_SIZE_MASK;
  switch(screenSize) {
      case Configuration.SCREENLAYOUT_SIZE_LARGE:
        Toast.makeText(this, "Large screen",Toast.LENGTH_LONG).show();
         break;
       case Configuration.SCREENLAYOUT_SIZE_NORMAL:
          Toast.makeText(this, "Normal screen",Toast.LENGTH_LONG).show();
           break;
       case Configuration.SCREENLAYOUT_SIZE_SMALL:
           Toast.makeText(this, "Small screen",Toast.LENGTH_LONG).show();
           break;
       default:
           Toast.makeText(this, "Screen size is neither large, normal or small" , Toast.LENGTH_LONG).show();

 }

密度を決定します。

int density= getResources().getDisplayMetrics().densityDpi;
   switch(density)
  {
  case DisplayMetrics.DENSITY_LOW:
     Toast.makeText(context, "LDPI", Toast.LENGTH_SHORT).show();
      break;
  case DisplayMetrics.DENSITY_MEDIUM:
       Toast.makeText(context, "MDPI", Toast.LENGTH_SHORT).show();
      break;
  case DisplayMetrics.DENSITY_HIGH:
      Toast.makeText(context, "HDPI", Toast.LENGTH_SHORT).show();
      break;
  case DisplayMetrics.DENSITY_XHIGH:
       Toast.makeText(context, "XHDPI", Toast.LENGTH_SHORT).show();
      break;
  }

参照用: http://devl-android.blogspot.in/2013/10/wifi-connectivity-and-hotspot-in-android.html

于 2013-10-24T05:18:49.343 に答える
4

かなり単純明快なコードだと思います!

public Map<String, Integer> deriveMetrics(Activity activity) {
    try {
        DisplayMetrics metrics = new DisplayMetrics();

        if (activity != null) {
            activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
        }

        Map<String, Integer> map = new HashMap<String, Integer>();
        map.put("screenWidth", Integer.valueOf(metrics.widthPixels));
        map.put("screenHeight", Integer.valueOf(metrics.heightPixels));
        map.put("screenDensity", Integer.valueOf(metrics.densityDpi));

        return map;
    } catch (Exception err) {
        ; // just use zero values
        return null;
    }
}

このメソッドは、どこでも独立して使用できるようになりました。デバイス画面に関する情報を取得したい場合は、次のようにします。

        Map<String, Integer> map = deriveMetrics2(this);
        map.get("screenWidth");
        map.get("screenHeight");
        map.get("screenDensity");

これが誰かの役に立ち、使いやすくなることを願っています。再修正または改善が必要な場合は、遠慮なくお知らせください。:-)

乾杯!!!

于 2016-04-25T05:13:06.917 に答える
4

DisplayMetrics を取得する方法:

1.

val dm = activity.resources.displayMetrics
val dm = DisplayMetrics() 
activity.windowManager.defaultDisplay.getMetrics(dm)
  1. val dm = DisplayMetrics() val wm = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager wm..defaultDisplay.getMetrics(dm)

それから得る

1 インチあたりのドット数で表される画面密度。DENSITY_LOW、DENSITY_MEDIUM、または DENSITY_HIGH のいずれかです。

dm.densityDpi

利用可能な表示サイズの絶対高さ (ピクセル単位)。

dm.heightPixels

使用可能な表示サイズの絶対幅 (ピクセル単位)。

dm.widthPixels

X 次元の画面の 1 インチあたりの正確な物理ピクセル数。

dm.xdpi

Y 次元での画面の 1 インチあたりの正確な物理ピクセル数。

dm.ydpi

表示指標

于 2020-09-14T13:28:16.413 に答える
4
DisplayMetrics displayMetrics = new DisplayMetrics();

getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);

int width = displayMetrics.widthPixels;

int height = displayMetrics.heightPixels;
于 2017-07-01T07:29:30.270 に答える
3

このコードを使用して、表示サイズをピクセル単位で取得できます。

Display display = getWindowManager().getDefaultDisplay();
SizeUtils.SCREEN_WIDTH = display.getWidth();
SizeUtils.SCREEN_HEIGHT = display.getHeight();
于 2012-06-28T20:26:20.267 に答える
2

あなたはこれを試すことができます、それは働いています

DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int ht = displaymetrics.heightPixels;
int wt = displaymetrics.widthPixels;

if ((getResources().getConfiguration().screenLayout &     Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE) {
Toast.makeText(this, "Large screen", Toast.LENGTH_LONG).show();}

  else if ((getResources().getConfiguration().screenLayout &  Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_NORMAL) {
Toast.makeText(this, "Normal sized screen", Toast.LENGTH_LONG)
        .show();

  } else if ((getResources().getConfiguration().screenLayout &        Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_SMALL) {
Toast.makeText(this, "Small sized screen", Toast.LENGTH_LONG)
        .show();
 } else {
Toast.makeText(this,
        "Screen size is neither large, normal or small",
        Toast.LENGTH_LONG).show();
 }

 // Determine density
 DisplayMetrics metrics = new DisplayMetrics();
 getWindowManager().getDefaultDisplay().getMetrics(metrics);
 int density = metrics.densityDpi;

 if (density == DisplayMetrics.DENSITY_HIGH) {
Toast.makeText(this,
        "DENSITY_HIGH... Density is " + String.valueOf(density),
        Toast.LENGTH_LONG).show();
 } else if (density == DisplayMetrics.DENSITY_MEDIUM) {
Toast.makeText(this,
        "DENSITY_MEDIUM... Density is " + String.valueOf(density),
        Toast.LENGTH_LONG).show();
 } else if (density == DisplayMetrics.DENSITY_LOW) {
Toast.makeText(this,
        "DENSITY_LOW... Density is " + String.valueOf(density),
        Toast.LENGTH_LONG).show();
 } else {
Toast.makeText(
        this,
        "Density is neither HIGH, MEDIUM OR LOW.  Density is "
                + String.valueOf(density), Toast.LENGTH_LONG)
        .show();
 }

 // These are deprecated
 Display display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE))
    .getDefaultDisplay();
 int  width = display.getWidth();
 int height = display.getHeight();
于 2013-09-13T13:44:34.103 に答える
1

サイモン-

画面サイズが異なれば、ピクセル密度も異なります。お使いの携帯電話の4インチのディスプレイは、26インチのテレビと言うよりも多かれ少なかれピクセルを持っている可能性があります。私が正しく理解している場合、彼は現在の画面が小さい、通常、大きい、および特大のどのサイズグループであるかを検出したいと考えています。私が考えることができる唯一のことは、ピクセル密度を検出し、それを使用して画面の実際のサイズを決定することです。

于 2012-06-28T20:30:00.643 に答える
0

非アクティビティ、つまり Fragment、Adapter、Model クラス、または拡張しないその他の Java クラスにいる場合はActivity、単純に機能しgetResources()ません。getActivity()フラグメントで使用するかcontext、対応するクラスに渡すことを使用できます。

mContext.getResources()

一般的な作業のためのメソッド/メソッドを持つクラスを Utils と言うようにすることをお勧めします。これの利点は、このメソッドを呼び出すアプリ内の任意の場所にある 1 行のコードで目的の結果を得ることができることです。

于 2017-11-13T14:57:42.553 に答える