【问题标题】:Effectively measure the available screen有效测量可用屏幕
【发布时间】:2014-03-30 14:44:20
【问题描述】:

我需要找到一种方法来实际获取设备屏幕的尺寸。我已经尝试了很长时间,但我无法找到一种方法来找到可绘制屏幕的高度和宽度(以像素为单位)。

这是我现在使用的代码:

SCREEN_HEIGHT = metrics.heightPixels - unusable_height;

unusable_height 由以下人员找到:

    //Calculate action Bar Height
    if (getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true)){
        unusable_height = TypedValue.complexToDimensionPixelSize(tv.data,getResources().getDisplayMetrics());
    }

    //Calculate the navigation bar height
    int resourceId = getResources().getIdentifier("navigation_bar_height", "dimen", "android");
    if (resourceId > 0) {
        unusable_height = unusable_height + getResources().getDimensionPixelSize(resourceId);
    }

这在我的平板电脑中完美运行,但在我的手机中,结果屏幕高度太大,因为东西会从屏幕上拉出。 (我根据屏幕高度计算所有尺寸)。这是横向模式。

有什么帮助吗?如何知道从操作栏末端到无法再绘制的像素总数?

在我的手机中,导航栏不会旋转,因此它会停留在纵向模式下的底部位置。所以底部是屏幕的末端。但是在我的平板电脑中,导航栏会旋转并位于屏幕底部。

【问题讨论】:

  • 您使用的是 AppCompat 的支持 ActionBar 吗?还是 Actionbar Sherlock?
  • 它不是夏洛克,因为我从来没有下载过这个库。所以我假设是一个 appcompat。

标签: android dimensions


【解决方案1】:

我找到了绕过这个问题的方法。然而它并不整洁。我把它贴在这里以防其他人需要它。可以通过将这些变量从 LayoutParams 都设置为 MATCHPARENT 的布局或视图中获取宽度和高度。当然这个视图需要设置为 setContentsView,所以它应该像主布局一样。但是,仅当视图已绘制时,才会抛出非零值,这意味着您无法在 onCreate 或 onResume 等方法中获取其值。

从好的方面来说,它应该总是可以工作,而且非常简单。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-13
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多