未正确选择Android布局高度限定符

时间:2013-11-12 04:35:54

标签: java android android-layout qualifiers

我有一款适用于Android 4.0的应用程序,仅在横向模式下运行。在一项活动中,我想根据可用的高度呈现不同的UI。我已经设置了相应的布局限定符目录,并且它们正在被选中,但不是以预期的方式。

我的文件夹是:

  • RES /布局
  • RES /布局h360dp

到目前为止,这么好。这是它开始脱轨的地方。该应用程序以全屏模式运行,唯一的镀铬是带有后部,主页和开关应用程序按钮的栏,无论如何都在侧面,不会影响可用高度。

应用程序报告可用高度为384dp。我甚至在屏幕上放了一个383dp高的垂直条,它正确显示在它下面有一小块空间。显然有384个点可用。

但是应用程序不会在res / layout-h360dp中使用该文件!我尝试了不同的数字直到它起作用,我发现截止值是360dp。当我将名称更改为layout-h359dp时,它可以工作,因此应用程序认为它只有359dp可用,但显然它有更多,这可以通过绘制垂直条的空间来节省。这是操作系统中的错误吗?

这是我用来以编程方式仔细检查可用空间的代码。

Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);

// Reports 1196x768
int width = size.x;
int height = size.y;

// Reports 598x384
float widthDp = MeasuringUtilities.convertPixelsToDp(width, this);
float heightDp = MeasuringUtilities.convertPixelsToDp(height, this);

// WTF? Reports 598x359! Why?!
float resourcesWidth = this.getResources().getConfiguration().screenWidthDp;
float resourcesHeight = this.getResources().getConfiguration().screenHeightDp;

像素到dp的转换是通过以下程序进行的:

public static float convertPixelsToDp(float px, Context context){
    Resources resources = context.getResources();
    DisplayMetrics metrics = resources.getDisplayMetrics();
    float dp = px / (metrics.densityDpi / 160f);
    return dp;
}

我认为至少getConfiguration()。screenHeightDp会报告一个似乎正在使用的数字。但为什么?实际可见,可用的高度是384.为什么报告359?

请帮忙! - 在西雅图失眠

0 个答案:

没有答案