Android では、画面サイズを Normal Large XLarge などと定義しています。
適切なフォルダー内の静的リソースを自動的に選択します。Java コードで現在のデバイスに関するこのデータが必要です。DisplayMetrics は、現在のデバイス密度に関する情報のみを提供します。画面サイズに関しては何もありません。
ここでgrepコードでScreenSize列挙型を見つけましたが、 これは4.0 SDKでは利用できないようです。この情報を取得する方法はありますか?
Android では、画面サイズを Normal Large XLarge などと定義しています。
適切なフォルダー内の静的リソースを自動的に選択します。Java コードで現在のデバイスに関するこのデータが必要です。DisplayMetrics は、現在のデバイス密度に関する情報のみを提供します。画面サイズに関しては何もありません。
ここでgrepコードでScreenSize列挙型を見つけましたが、 これは4.0 SDKでは利用できないようです。この情報を取得する方法はありますか?
このコードをコピーして に貼り付けます。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();
画面サイズの決定 :
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
かなり単純明快なコードだと思います!
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");
これが誰かの役に立ち、使いやすくなることを願っています。再修正または改善が必要な場合は、遠慮なくお知らせください。:-)
乾杯!!!
DisplayMetrics を取得する方法:
1.
val dm = activity.resources.displayMetrics
val dm = DisplayMetrics()
activity.windowManager.defaultDisplay.getMetrics(dm)
それから得る
1 インチあたりのドット数で表される画面密度。DENSITY_LOW、DENSITY_MEDIUM、または DENSITY_HIGH のいずれかです。
dm.densityDpi
利用可能な表示サイズの絶対高さ (ピクセル単位)。
dm.heightPixels
使用可能な表示サイズの絶対幅 (ピクセル単位)。
dm.widthPixels
X 次元の画面の 1 インチあたりの正確な物理ピクセル数。
dm.xdpi
Y 次元での画面の 1 インチあたりの正確な物理ピクセル数。
dm.ydpi
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int width = displayMetrics.widthPixels;
int height = displayMetrics.heightPixels;
このコードを使用して、表示サイズをピクセル単位で取得できます。
Display display = getWindowManager().getDefaultDisplay();
SizeUtils.SCREEN_WIDTH = display.getWidth();
SizeUtils.SCREEN_HEIGHT = display.getHeight();
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();
サイモン-
画面サイズが異なれば、ピクセル密度も異なります。お使いの携帯電話の4インチのディスプレイは、26インチのテレビと言うよりも多かれ少なかれピクセルを持っている可能性があります。私が正しく理解している場合、彼は現在の画面が小さい、通常、大きい、および特大のどのサイズグループであるかを検出したいと考えています。私が考えることができる唯一のことは、ピクセル密度を検出し、それを使用して画面の実際のサイズを決定することです。
非アクティビティ、つまり Fragment、Adapter、Model クラス、または拡張しないその他の Java クラスにいる場合はActivity、単純に機能しgetResources()ません。getActivity()フラグメントで使用するかcontext、対応するクラスに渡すことを使用できます。
mContext.getResources()
一般的な作業のためのメソッド/メソッドを持つクラスを Utils と言うようにすることをお勧めします。これの利点は、このメソッドを呼び出すアプリ内の任意の場所にある 1 行のコードで目的の結果を得ることができることです。