【问题标题】:How to get android device screen size?如何获取安卓设备的屏幕尺寸?
【发布时间】:2013-10-03 09:28:35
【问题描述】:

我有两个分辨率相同的安卓设备

Device1 -> 分辨率 480x800 屏幕对角线尺寸 -> 4.7 英寸

Device2 -> 分辨率 480x800 屏幕对角线尺寸 -> 4.0 英寸

如何查找设备对角线屏幕尺寸?

Detect 7 inch and 10 inch tablet programmatically

我使用了上面的链接,但它给出了两个设备对角线屏幕尺寸 -> 5.8

【问题讨论】:

  • 那你有什么问题?
  • 我想以编程方式查找屏幕对角线尺寸以查找哪个设备是
  • 您尝试的代码是正确的代码,因为您正在获得对角线屏幕尺寸。
  • 但它为两个设备提供了相同的对角线屏幕尺寸。还有其他方法可以计算屏幕对角线尺寸吗?

标签: android android-screen


【解决方案1】:

尝试此代码以获取以英寸为单位的屏幕尺寸

DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int width=dm.widthPixels;
int height=dm.heightPixels;
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);
double screenInches = Math.sqrt(x+y);

【讨论】:

  • 没有得到确切的位置。如果屏幕尺寸为 5.00 英寸,则得到 4.338 值
  • double wi=(double)width/dm.xdpi; double hi=(double)height/dm.ydpi; 更准确。根据 DensityMetrics 的文档,它给出了准确的密度,而 dm.densityDpi 只能给出某些离散值。我已经验证它可以在两台设备上运行。
  • 它不准确。它为我的 4.7" 手机返回 4.3"
  • 如果你得到了奇怪的答案(或者更重要的是你的图像很奇怪,因为你使用大小来缩放东西),不要忘记使用 scaledDensity。请参阅下面的答案。
  • 对于 SDK 17 及以上版本,请参考 stackoverflow.com/a/55337830/6503228 以获得准确的屏幕尺寸
【解决方案2】:

这行不通?

DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
double x = Math.pow(dm.widthPixels / dm.xdpi, 2);
double y = Math.pow(dm.heightPixels / dm.ydpi, 2);
double screenInches = Math.sqrt(x + y);
Log.d("debug", "Screen inches : " + screenInches); 

【讨论】:

【解决方案3】:

如果您正在做我所做的事情并根据屏幕大小更改内容的大小,请不要忘记将屏幕大小乘以 scaledDensity。例如:

DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
double x = Math.pow(dm.widthPixels / dm.xdpi, 2);
double y = Math.pow(dm.heightPixels / dm.ydpi, 2);
double screenInches = Math.sqrt(x + y) * dm.scaledDensity;
Log.d("debug", "Screen inches : " + screenInches); 

注意倒数第二行!这是 scaledDensity 的更多信息:What does DisplayMetrics.scaledDensity actually return in Android?

【讨论】:

  • 您链接的问题的公认答案还提到使用getResources().getDisplayMetrics(); 来获得正确的 scaledDensity 值。
  • * dm.scaledDensity 拯救了我的一天。谢谢。
【解决方案4】:

以上答案都没有给出正确的屏幕尺寸......但下面的方法是正确的。

private String getScreenSize() {
    Point point = new Point();
    ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getRealSize(point);
    DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
    int width=point.x;
    int height=point.y;
    double wi=(double)width/(double)displayMetrics.xdpi;
    double hi=(double)height/(double)displayMetrics.ydpi;
    double x = Math.pow(wi,2);
    double y = Math.pow(hi,2);
    return String.valueOf(Math.round((Math.sqrt(x+y)) * 10.0) / 10.0);
}

注意:这仅适用于 API 17 及更高版本。

【讨论】:

    【解决方案5】:

    试试这个:

     public static Boolean isTablet(Context context) {
    
        if ((context.getResources().getConfiguration().screenLayout & 
                Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE) {
    
          return true;
      }
        return false;
    }
    

    【讨论】:

      【解决方案6】:
      DisplayMetrics displayMetrics = context.getResources()
                          .getDisplayMetrics();
      
      字符串 screenWidthInPix = displayMetrics.widthPixels;
      
      String screenheightInPix = displayMetrics.heightPixels;

      【讨论】:

      • 这是一个糟糕的方法。 Thre 资源返回的 dpi 和分辨率不准确。
      【解决方案7】:

      毕达哥拉斯定理求安卓手机/平板电脑屏幕的对角线尺寸,同样的原理可以应用于iPhone或黑莓屏幕。

      换一种方法试试:

        DisplayMetrics met = new DisplayMetrics();                
        this.getWindowManager().getDefaultDisplay().getMetrics(met);// get display metrics object
        String strSize = 
        new DecimalFormat("##.##").format(Math.sqrt(((met.widthPixels / met.xdpi) *
        (met.widthPixels / met.xdpi)) +
        ((met.heightPixels / met.ydpi) * (met.heightPixels / met.ydpi))));
        // using Dots per inches with width and height
      

      【讨论】:

      • this.getWindowManager() 这给了我错误。怎么能得到这个。我可以通过这些 view.getContext().getResources().getDisplayMetrics(); 得到显示矩阵;
      • homeFragment 类型的 getWindowManager() 方法未定义
      • 我是这样写的。有什么问题吗?因为它给了我错误的对角线屏幕尺寸。 DisplayMetrics met = view.getContext().getResources().getDisplayMetrics();// 获取显示指标对象 String strSize = new DecimalFormat("##.##").format(Math.sqrt(((met.widthPixels / met.xdpi) * (met.widthPixels / met.xdpi)) + ((met.heightPixels / met.ydpi) * (met.heightPixels / met.ydpi)))); Log.d("Sreen Inches0", "Inches0:"+strSize);
      • 方法getWindowManager()需要activity实例所以你必须写Activity.getWindowManager()
      猜你喜欢
      • 2023-03-17
      • 1970-01-01
      • 2011-09-08
      • 1970-01-01
      • 2011-09-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多