【问题标题】:Wrong Screen width and height屏幕宽度和高度错误
【发布时间】:2012-12-06 06:36:09
【问题描述】:

使用下一个代码在android中获取屏幕宽度和高度的区别是什么:

 public HorseView(Context context) {
        super(context);
    DisplayMetrics metrics = context.getResources().getDisplayMetrics();
    int height = metrics.heightPixels;
.............
}

并使用另一个 this:

public void surfaceCreated(SurfaceHolder holder) {
    thread.setRunning(true);
    thread.start();
    int height = this.getHeight();
}

任何人都知道为什么在第一种情况下,高度设置为 508;第二种情况是533;

提前致谢。

【问题讨论】:

    标签: android android-layout android-emulator


    【解决方案1】:
    • 533 * 1.5 = 800。
    • 508 * 1.5 = 762。

    这两个值的不同是因为通知栏的高度,也就是38px的高度。

    【讨论】:

    • 只是为了详细说明。一是测量屏幕尺寸。而另一个是测量某物的表面尺寸。不是一回事。
    【解决方案2】:

    试试看。

    Display display = getWindowManager().getDefaultDisplay();
         int height=display.getHeight();
                  int width=display.getWidth();
    

    【讨论】:

    • 我在 Activity 之外调用它。 getWindowManager() 在那里不起作用。
    【解决方案3】:

    模拟器或设备有不同的密度:

    • ldpi=.75,
    • mdpi=1,
    • hdpi=1.5,
    • xhdpi=2

    状态栏图标的高度为 25dp (mdpi)。对于所有密度,条形高度:25*(ldpi=.75, mdpi=1, hdpi=1.5, xhdpi=2) = (19px, 25px, 38px, 50px)。

    我们可以以 25dp 为底,乘以密度(向上取整),得到任何设备上的状态栏高度:

    int statusBarHeight = (int) Math.ceil(25 * context.getResources().getDisplayMetrics().density);
    

    最后,如果您有上下文,应用程序可以使用的维度是:

    int heightAreaWork = context.getResources().getDisplayMetrics().heightPixels - statusBarHeight;
    

    【讨论】:

      猜你喜欢
      • 2012-11-01
      • 2016-06-21
      • 1970-01-01
      • 1970-01-01
      • 2011-09-09
      • 1970-01-01
      • 2010-11-25
      • 2015-09-10
      • 2017-06-17
      相关资源
      最近更新 更多