【问题标题】:why it gives screen inch size wrong all the time?为什么它总是给屏幕英寸尺寸错误?
【发布时间】:2017-04-07 05:30:54
【问题描述】:

我想按英寸计算设备尺寸。我正在使用每次搜索都会出现的这段代码。但问题是当我将设备 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);

【问题讨论】:

  • 您可以将 id 用于父视图。然后你可以将你的逻辑用于覆盖屏幕的父级。

标签: android screen-size android-screen


【解决方案1】:

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

操作栏

软键

屏幕方向

使用以下答案

 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

【讨论】:

  • 感谢您的回答,我也已经尝试过这个...在我在这里写之前我搜索了很多次并尝试了很多次
【解决方案2】:

您可以使用 getResources().getDisplayMetrics()

DisplayMetrics:一种结构,描述有关 展示, 例如它的大小、密度和字体缩放。

DisplayMetrics metrics = getResources().getDisplayMetrics();

    int width = metrics.widthPixels;
    int height = metrics.heightPixels;
    int dens = metrics.densityDpi;
    double wi = (double)width / (double)dens;
    double hi = (double)height / (double)dens;
    double x = Math.pow(wi, 2);
    double y = Math.pow(hi, 2);
    double screenInches = Math.sqrt(x+y);

    System.out.println("getSIZE"+screenInches);

欲了解更多信息,请访问Android DisplayMetrics returns incorrect screen size.

【讨论】:

  • 感谢您的回答,但我仍然得到 4.08 的 4.5 英寸屏幕尺寸
  • @Eazyz 是的。Bar 的问题。阅读上面的链接。
  • 我现在得到了 Nan 的屏幕尺寸:I
【解决方案3】:

设备尺寸与屏幕尺寸不同,因为屏幕不会覆盖整个设备尺寸

Android 操作系统与设备大小无关,您无法以编程方式获取设备尺寸,您只能获取屏幕尺寸

【讨论】:

  • 我想获得英寸来为小型设备制作布局,所以即使是 5.2 英寸的屏幕尺寸而不是设备屏幕也会返回错误答案
  • @Eazyz 我不明白你的确切问题是什么
【解决方案4】:

只需少量更改即可尝试

DisplayMetrics metrics = getResources().getDisplayMetrics();

int width = metrics.widthPixels;
int height = metrics.heightPixels;
int dens = metrics.densityDpi;
double wi = (double)width / (double)dens;
double hi = (double)height / (double)dens;
double x = Math.pow(wi, 2);
double y = Math.pow(hi, 2);
DecimalFormat df = new DecimalFormat("#.#");
df.setRoundingMode(RoundingMode.CEILING);
try {
double screenInches = Double.parseDouble(df.format(Math.sqrt(x+y)));

Log.e("hello"," "+screenInches);
} catch (NumberFormatException e) {

e.printStackTrace();

}

【讨论】:

  • 感谢您的回答..!但它仍然是相同的,我得到了 4.08 的 4.5 英寸屏幕
  • 不可能。当您将格式作为小数点后仅一位数时,您如何获得小数点后两位数。
  • 输入您的日志响应,以便我了解它发生的原因。
  • 04-07 10:33:22.375 4775-4775/com.tsd.speakUp E/hello: 4.1
  • 我也得到了同样的结果,甚至没有接近。
猜你喜欢
  • 2018-07-08
  • 1970-01-01
  • 2018-06-27
  • 2013-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-30
  • 2021-03-30
相关资源
最近更新 更多