android - 为什么它总是给出错误的屏幕英寸尺寸?

标签 android screen-size android-screen

我想按英寸计算设备尺寸。我正在使用每次搜索都会出现的代码。但问题是当我把设备放在 4.5 英寸时,我在 android studio 中的答案是 4。我尝试了 5.2 英寸的设备,我得到了 4.3 英寸和 10.1 英寸 -> 答案是 9.0。 那我怎样才能得到准确的答案呢?

 DisplayMetrics dm = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(dm);

    double wi=(double)dm.widthPixels/dm.xdpi;
    double hi=(double)dm.heightPixels/dm.ydpi;
    double x = Math.pow(wi,2);
    double y = Math.pow(hi,2);
    double screenInches = Math.sqrt(x+y);
    Log.e("hello"," "+screenInches);

最佳答案

你的代码的问题是它没有考虑到

操作栏

软键

屏幕方向

使用下面的答案

 WindowManager windowManager = getWindowManager();
Display display = windowManager.getDefaultDisplay();
DisplayMetrics displayMetrics = new DisplayMetrics();
display.getMetrics(displayMetrics);

// since SDK_INT = 1;
mWidthPixels = displayMetrics.widthPixels;
mHeightPixels = displayMetrics.heightPixels;

// includes window decorations (statusbar bar/menu bar)
if (Build.VERSION.SDK_INT >= 14 && Build.VERSION.SDK_INT < 17)
{
    try
    {
        mWidthPixels = (Integer) Display.class.getMethod("getRawWidth").invoke(display);
        mHeightPixels = (Integer) Display.class.getMethod("getRawHeight").invoke(display);
    }
    catch (Exception ignored)
    {
    }
}

// includes window decorations (statusbar bar/menu bar)
if (Build.VERSION.SDK_INT >= 17)
{
    try
    {
        Point realSize = new Point();
        Display.class.getMethod("getRealSize", Point.class).invoke(display, realSize);
        mWidthPixels = realSize.x;
        mHeightPixels = realSize.y;
    }
    catch (Exception ignored)
    {
    }


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

归功于him

关于android - 为什么它总是给出错误的屏幕英寸尺寸?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43270350/

相关文章:

php - 物理屏幕尺寸 'detection' 基于 PHP/javascript 中的用户代理

java - 当我的设备将方向更改为纵向颠倒(180 度)时,如何收到通知?

android - 如何避免在 Android M 上处于电池/省电模式时停止我的前台服务

ScrollView 内的 Android ListView

background-image - App Inventor 应用程序根据屏幕大小调整背景图像和其他内容的大小

android - 为什么我的 Galaxy Note 3 的 DP 尺寸与小得多的手机相同?

安卓 : Restrict app not to run on Tablet

android - 如何在 Android 中使用图案/密码模式锁定/解锁屏幕?

java - Android ListView : Return one of multiple views from getChildAt()?

android - 数据库未从 Assets 文件夹复制到设备