如何在Android Layout文件夹中定位1280x720 WXGA720分辨率(如新的Galaxy Nexus)?

时间:2012-01-25 16:44:38

标签: android xml eclipse layout android-4.0-ice-cream-sandwich

在运行4.0.3冰淇淋三明治的Android模拟器上以WXGA720分辨率测试我的应用程序时,我的应用程序从横向视图中的layout-normal-land-854x480文件夹中获取布局资源,并使用layout-port-480x320文件夹肖像视图。我希望能够专门针对此分辨率,以便我的应用程序在新手机上正确显示。我该怎么做呢?我试过以下......

布局正常土地xhdpi
布局正常端口-xhdpi
布局正常土地XLARGE
布局正常土地大
布局正常土地1280×720
layout-normal-port-1280x720等......

...它仍然会从上面详述的错误文件夹中获取资产。

我的应用是针对Android 2.1(我认为这些天仍然是标准目标),所以我不能据我所知使用新的布局限定符。这是一个错误吗?有没有人遇到同样的问题并找到了解决方法?

我有以下文件夹配置,所有其他AVD都按预期显示:

布局
布局土地
布局正常土地分辨率480x320
布局正常土地854×480
布局端口,分辨率480x320
布局端口-800×480

3 个答案:

答案 0 :(得分:5)

  

在运行4.0.3冰淇淋三明治的Android模拟器上以WGXA720分辨率测试我的应用程序时,我的应用程序从横向视图中的layout-normal-land-854x480文件夹中获取布局资源,并使用layout-port-480x320文件夹肖像视图。

如果我不得不猜测,您的清单中没有有效的<supports-screens>元素(或者可能没有android:minSdkVersion),因此您将被置于兼容模式中。

另外,请不要使用-480x320-854x480等后缀。出于某种原因,这些已从文档中删除。无论你认为用它们解决什么问题,都可以通过其他方式更好地解决。

  

我的应用程序定位到Android 2.1(我认为这些日子仍然是标准目标),所以我不能使用新的布局限定符。

您可以将构建目标设置为更高级别并使用新的布局限定符。但是,较旧的设备会忽略它们,因此您仍然需要使用-normal-land以及kin,与具有新限定符的任何资源集并行使用。您可以创建资源别名以最小化代码重复。

答案 1 :(得分:1)

我有一个类似的问题正确显示我的布局,但我使用的是具有1280 x 720分辨率的HTC Rezound。它使用Android 2.3.4版。 我的屏幕只显示在显示屏的上半部分,底部三分之一显示为黑色。使用低分辨率手机,一切都正常显示。

我经历了制作新布局目录(layout-xhdpi,layout-large,layout-1280x720,layout-1200x700等)并修改我的布局文件以匹配更大的分辨率,但每次尝试都失败了,应用程序始终只显示在屏幕的上半部分。我从那里读过文档 http://developer.android.com/guide/practices/screens_support.html并没有找到任何解决问题的方法。 我终于修复了它,并且解决方案没有任何内容添加为更高分辨率设置的新布局目录! 解决方案完全是关于AndroidManifest.xml文件中的“uses-sdk”语句。我的原始清单包含声明:

<uses-sdk minSdkVersion="8"/>

只指定了最小sdk版本,图形将无法在Rezound上正确显示。 但是,在AndroidManifest.xml中只更改了一行(并且没有进行其他更改)后,手机正确显示了所有屏幕:

<uses-sdk android:targetSdkVersion="9" minSdkVersion="8" />

为什么要修复它而不是记录的方法?我不知道!我在Android中发现许多隐藏的连接,似乎无视逻辑解释。有人可以向我解释为什么更改uses-sdk语句对于在更高分辨率的显示器上显示至关重要?

答案 2 :(得分:1)

之前我已经回答了这个问题,但我以前的回复只允许我填充显示(它只填充了前三分之一),但我永远无法使用其他布局。 我正在使用HTC Rezound,它有一个1280×720的显示屏。我需要找出Android认为它是什么样的显示器。我在onCreate处理程序中添加了以下代码:

// Figure out what kind of display we have
  int screenLayout = getResources().getConfiguration().screenLayout;

  if ((screenLayout & Configuration.SCREENLAYOUT_SIZE_SMALL) == Configuration.SCREENLAYOUT_SIZE_SMALL)
     LogMessage("Main onCreate", "Info", "Screen size is Small");
  else if ((screenLayout & Configuration.SCREENLAYOUT_SIZE_NORMAL) == Configuration.SCREENLAYOUT_SIZE_NORMAL)
     LogMessage("Main onCreate", "Info", "Screen size is Normal");
  else if ((screenLayout & Configuration.SCREENLAYOUT_SIZE_LARGE) == Configuration.SCREENLAYOUT_SIZE_LARGE)
     LogMessage("Main onCreate", "Info", "Screen size is Large");

  if ((screenLayout & Configuration.SCREENLAYOUT_LONG_YES) == Configuration.SCREENLAYOUT_LONG_YES)
     LogMessage("Main onCreate", "Info", "Screen size is Long");

  // Get the metrics
  DisplayMetrics metrics = new DisplayMetrics();
  getWindowManager().getDefaultDisplay().getMetrics(metrics);
  int heightPixels = metrics.heightPixels;
  int widthPixels = metrics.widthPixels;
  int densityDpi = metrics.densityDpi;
  float density = metrics.density;
  float scaledDensity = metrics.scaledDensity;
  float xdpi = metrics.xdpi;
  float ydpi = metrics.ydpi;

  LogMessage("Main onCreate", "Info", "Screen W x H pixels: " + widthPixels  + " x " + heightPixels);
  LogMessage("Main onCreate", "Info", "Screen X x Y dpi: " + xdpi + " x " + ydpi);
  LogMessage("Main onCreate", "Info", "density = " + density + "  scaledDensity = " + scaledDensity +
     "  densityDpi = " + densityDpi);

日志中的结果是:

Info, Main onCreate, Screen size is Normal
Info, Main onCreate, Screen size is Long
Info, Main onCreate, Screen W x H pixels: 720 x 1280
Info, Main onCreate, Screen X x Y dpi: 345.0566 x 342.23157
Info, Main onCreate, density = 2.0  scaledDensity = 2.0  densityDpi = 320

有了这个,我意识到Android正在将其称为普通显示器,因此我使用备用布局文件创建了res / layout-normal-1280x720目录。

我的清单包含:

<supports-screens
    android:largeScreens="true"
    android:normalScreens="true"
    android:smallScreens="true"
    android:anyDensity="true"
 />

<uses-sdk android:targetSdkVersion="9" android:minSdkVersion="8" />

通过这些更改,我终于可以获得与此手机一起使用的备用布局。