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

use*_*394 20 android android-screen-support android-resources

我有4种不同的设备:

  1. 华硕平板电脑,屏幕7"
  2. 联想平板电脑,屏幕尺寸7"
  3. HTC手机屏幕5英寸
  4. HTC手机,屏幕尺寸4.7"

我想知道我的设备的最小宽度(sw)为它做一个支撑布局.

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

我尝试使用以下代码打印sw:

DisplayMetrics metrics = getResources().getDisplayMetrics();
Log.i("Density", ""+metrics.densityDpi);
Run Code Online (Sandbox Code Playgroud)

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

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

Tob*_*iug 44

最佳方案:

Configuration config = getResources().getConfiguration();
config.smallestScreenWidthDp
Run Code Online (Sandbox Code Playgroud)

最后一行返回dp中的SW值!

来源谷歌:http://android-developers.blogspot.fr/2011/07/new-tools-for-managing-screen-sizes.html


Don*_*pan 14

这是另一种简单的方法.

您可以从开发者选项中检查设备的最小宽度(在Android Studio模拟器中,而在我的Real Device中找不到它).

在此输入图像描述


use*_*617 12

更正上面的答案,正确的代码找到正确的sw试试这个:

DisplayMetrics dm = getApplicationContext().getResources().getDisplayMetrics();
float screenWidth = dm.widthPixels / dm.density;
float screenHeight = dm.heightPixels / dm.density;
Run Code Online (Sandbox Code Playgroud)

screenWidth和screenHeight中较小的一个是你的sw.


Rus*_*tam 8

你可以试试这个:

DisplayMetrics dm = mActivity.getApplicationContext()
                    .getResources().getDisplayMetrics();
            float screenWidth = dm.widthPixels / dm.xdpi;
            float screenHeight = dm.heightPixels / dm.ydpi;
Run Code Online (Sandbox Code Playgroud)

详情:这里

  • 这不会返回SW.它应该是`screenWidth = dm.widthPixels /dm.density;` (4认同)

Ran*_*mar 8

Min api 13及以上版本与@Tobliug回答 - 最佳解决方案.

 Configuration config = getResources().getConfiguration();
 config.smallestScreenWidthDp;// But it requires API level 13
Run Code Online (Sandbox Code Playgroud)

在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;
}

}
Run Code Online (Sandbox Code Playgroud)

从您的活动或片段中只需传递您的上下文并获得您的小宽度

double smallWidthDp=SmallWidthCalculator.getInstance().getSmallWidth(this);
Run Code Online (Sandbox Code Playgroud)