我有4种不同的设备:
我想了解设备的最小宽度(sw),以便为其制作支持布局。
我想创建一个像“layout-sw600dp”这样的资源文件夹,但我不知道最小宽度(sw)的值。
我尝试使用此代码打印sw:
DisplayMetrics metrics = getResources().getDisplayMetrics();
Log.i("Density", ""+metrics.densityDpi);
但我不知道这是否是正确的值。
如何找到最小宽度(sw)?
答案 0 :(得分:38)
最佳解决方案:
Configuration config = getResources().getConfiguration();
config.smallestScreenWidthDp
最后一行返回dp!中的SW值
来源谷歌:http://android-developers.blogspot.fr/2011/07/new-tools-for-managing-screen-sizes.html
答案 1 :(得分:13)
答案 2 :(得分:12)
更正上面的答案,正确的代码找到正确的试试这个:
DisplayMetrics dm = getApplicationContext().getResources().getDisplayMetrics();
float screenWidth = dm.widthPixels / dm.density;
float screenHeight = dm.heightPixels / dm.density;
screenWidth和screenHeight中较小的一个是你的sw。
答案 3 :(得分:8)
你可以试试这个:
DisplayMetrics dm = mActivity.getApplicationContext()
.getResources().getDisplayMetrics();
float screenWidth = dm.widthPixels / dm.xdpi;
float screenHeight = dm.heightPixels / dm.ydpi;
详细信息:here
答案 4 :(得分:7)
Min api 13及以上版本使用@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);