如何知道Android设备的最小宽度(sw)?

时间:2014-10-23 04:01:48

标签: android android-resources android-screen-support

我有4种不同的设备:

  1. 华硕平板电脑,屏幕显示7“
  2. 联想平板电脑,屏幕显示7“
  3. HTC手机,屏幕显示5“
  4. HTC手机,屏幕尺寸为4.7“
  5. 我想了解设备的最小宽度(sw),以便为其制作支持布局。

    我想创建一个像“layout-sw600dp”这样的资源文件夹,但我不知道最小宽度(sw)的值。

    我尝试使用此代码打印sw:

    DisplayMetrics metrics = getResources().getDisplayMetrics();
    Log.i("Density", ""+metrics.densityDpi);
    

    但我不知道这是否是正确的值。

    如何找到最小宽度(sw)?

5 个答案:

答案 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)

这是另一种简单的方法。

您可以从开发者选项(在Android Studio模拟器及其在我的真实设备中找不到它)中检查设备的最小宽度。< / p>

enter image description here

答案 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 类&amp;只需复制粘贴此代码

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