私は4つの異なるデバイスを持っています:
デバイスのサポートレイアウトを作成するために、デバイスの最小幅(sw)を知りたいです。
「layout-sw600dp」のようなリソースフォルダを作りたいのですが、最小幅(sw)の値がわかりません。
私はこのコードを使用してソフトウェアを印刷しようとしました:
DisplayMetrics metrics = getResources().getDisplayMetrics();
Log.i("Density", ""+metrics.densityDpi);
しかし、これが正しい値かどうかはわかりません。
最小幅(sw)を見つけるにはどうすればよいですか?
あなたはこれを試すことができます:
DisplayMetrics dm = mActivity.getApplicationContext()
.getResources().getDisplayMetrics();
float screenWidth = dm.widthPixels / dm.xdpi;
float screenHeight = dm.heightPixels / dm.ydpi;
詳細: ここ
最小API13以降の最適なソリューション:
Configuration config = getResources().getConfiguration();
config.smallestScreenWidthDp
最後の行は、SW値をdpで返します。
ソースグーグル: http://Android-developers.blogspot.fr/2011/07/new-tools-for-managing-screen-sizes.html
上記の答えの修正、正しいソフトウェアを見つけるための正しいコードはこれを試してください:
DisplayMetrics dm = getApplicationContext().getResources().getDisplayMetrics();
float screenWidth = dm.widthPixels / dm.density;
float screenHeight = dm.heightPixels / dm.density;
screenWidthとscreenHeightのどちらか小さい方がswです。
Min api13以降は@Tobliugの回答-最良の解決策を採用しています。
Configuration config = getResources().getConfiguration();
config.smallestScreenWidthDp;// But it requires API level 13
APIレベル13未満では、この回答を試してください
作成SmallWidthCalculator.Javaクラス&このコードをコピーして貼り付けるだけ
import Android.content.Context;
import Android.graphics.Point;
import Android.os.Build;
import Android.util.DisplayMetrics;
import Android.util.Log;
import Android.view.Display;
public class SmallWidthCalculator {
private static SmallWidthCalculator ourInstance = new SmallWidthCalculator();
public static SmallWidthCalculator getInstance() {
return ourInstance;
}
private Context mContext;
private SmallWidthCalculator() {
}
public double getSmallWidth(Context context) {
mContext = context;
DisplayMetrics dm = context.getResources().getDisplayMetrics();
int width = dm.widthPixels;
int height = dm.heightPixels;
double dpi = getDPI(width, height);
double smallWidthDPI = 0;
int smallWidth = 0;
if (width < height)
smallWidth = width;
else
smallWidth = height;
smallWidthDPI = smallWidth / (dpi / 160);
return smallWidthDPI;
}
private double getDPI(int width,
int height) {
double dpi = 0f;
double inches = getScreenSizeInInches(width, height);
dpi = Math.sqrt(Math.pow(width, 2) + Math.pow(height, 2)) / inches;
return dpi;
}
private double getScreenSizeInInches(int width, int height) {
if (mContext != null) {
DisplayMetrics dm = mContext.getResources().getDisplayMetrics();
double wi = (double) width / (double) dm.xdpi;
double hi = (double) height / (double) dm.ydpi;
double x = Math.pow(wi, 2);
double y = Math.pow(hi, 2);
return Math.sqrt(x + y);
}
return 0;
}
}
アクティビティまたはフラグメントから、コンテキストを渡して、幅を小さくします。
double smallWidthDp=SmallWidthCalculator.getInstance().getSmallWidth(this);