如何适当地包括10“和7”布局

Nexus 7:7“1280×800

Galaxy标签10.1 10“1280×800

我希望我的应用可以在7英寸和10英寸的平板电脑上运行。 据我所知,我必须在我的应用程序中包含这些布局文件夹:

为7英寸片剂

  • 布局sw600dp
  • 布局sw600dp端口

对于10英寸的药片

  • 布局sw720dp
  • 布局sw720dp端口

它在nexus 7上运行良好,但在10“平板电脑上加载sw600dp布局。

如果我包含这些默认文件夹:

  • 布局
  • 布局端口

10“星系标签从这些加载布局。

如果我只包含默认的布局文件夹和sw600dp,它会在nexus7上崩溃。

我应该如何支持手机,7“平板电脑和10”平板电脑,如果10“星系标签不会加载sw720p布局?

编辑:格式化

问题是,我没有默认的布局文件夹。

我试着通过只使用sw600dp和sw720dp文件夹。 我仍然不知道为什么他们不工作,但我不在乎。 我无法使用swxxxdp <3.2,所以拧紧。

所以,如果你想写一个应用程序,它必须支持手机(2.2 +),7英寸的平板电脑和10英寸的平板电脑,使用以下oldschool的东西:

这是默认的布局 ,即使您不打算支持电话,也需要这样做!

布局大 7“平板电脑(工程仿真器和nexus7)

layout-xlarge for 10“平板电脑(适用于模拟器和galaxytab10.1)

其他人也得出了同样的结论。

我的申请也面临着这样的问题。 但我find了一个很好的解决scheme。 我只有一个tablet布局,目录名称是layout-sw600dp 。 现在,当部分来到高度和宽度的问题,我已经创build了几个不同的values目录,我在其中放置dimensionsfont size和其他存根(stub)。 所以在平板电脑屏幕的layout上没有constant价值。

 androd:layout_width:"60dp" // i drop this scenario androd:layout_width:"@dimen/tab_width" // i used this scenario 

和你的values目录名称会像

 values-xlarge values-large 

所有值将从您的值目录中获取。 它不会创build不同的布局,但是一个布局可以多次使用。

以下是Developer.android网站的文字。 configuration示例

为了帮助您针对不同types的设备定位您的一些devise,以下是一些典型屏幕宽度的数字:

 320dp: a typical phone screen (240x320 ldpi, 320x480 mdpi, 480x800 hdpi, etc). 480dp: a tweener tablet like the Streak (480x800 mdpi). 600dp: a 7” tablet (600x1024 mdpi). 720dp: a 10” tablet (720x1280 mdpi, 800x1280 mdpi, etc). 

使用表2中的大小限定符,您的应用程序可以使用您想要的宽度和/或高度的任意数字在手机和平​​板电脑的不同布局资源之间切换。 例如,如果600dp是平板电脑布局支持的最小可用宽度,则可以提供以下两组布局:

res / layout / main_activity.xml#手机
res / layout-sw600dp / main_activity.xml#用于平板电脑

===

在这里,你可以看到,1280 * 720的layout-sw720dp是在layout-sw720dp所以不是创buildlayout-normal-xlarge而是使用这个让你决定差异的东西。 使用layout-large-mdpilayout-large-ldpi来代替不同的标识,是不是只用smallest width标识呢? 因为,android为不同的图片提供drawables目录,唯一的就是它的parsing度。 你有以上的解决scheme。

编辑

那么你必须开发不同的布局。 没有别的select。 我发现在http://jamil.fluidsoul.net/2011/03/06/creating-android-applications-for-multiple-screen-sizes

 Low density Small screens QVGA 240x320 (120dpi): layout-small-ldpi (240x320) layout-small-land-ldpi (320x240) Low density Normal screens WVGA400 240x400 (x432) (120dpi): layout-ldpi (240 x 400 ) layout-land-ldpi (400 x 240 ) Medium density Normal screens HVGA 320x480 (160dpi): layout-mdpi (320 x 480 ) layout-land-mdpi (480 x 320 ) Medium density Large screens HVGA 320x480 (160dpi): layout-large-mdpi (320 x 480 ) layout-large-land-mdpi (480 x 320) Galaxy Tab ( 240 dpi ): layout-large (600 x 1024) layout-large-land (1024 x 600) High density Normal screens WVGA800 480x800 (x854) (240 dpi): layout-hdpi (480 x 800) layout-land-hdpi (800 x 480) Xoom (medium density large but 1280x800 res) (160 dpi): layout-xlarge (800 x 1280) layout-xlarge-land (1280 x 800) 

这很奇怪,因为你做的是正确的事情。

Nexus 7应该selectsw600dp限定符。
如果可用,应该由Galaxy Tabselectsw720dp限定符。

你确定它试图find一个合适的布局崩溃? Android可能会find正确的布局,但布局xml文件中的某些内容可能会丢失,并导致崩溃。

是的,你应该使用布局相关的文件夹,但也确保任何设备独立的布局进入你的res /布局文件夹。

这是在Android开发者网站上提到的,但是要重申他们的观点,如果您的布局只能在支持大型和标准尺寸设备的应用上的layout-xlarge文件夹中提供,那么该应用将会以更小的设备将无法find此资源的任何匹配。

这是一个很好的文件夹结构,从下面开始:

 res/layout 

在那里保持一个独立于设备的布局,如果你考虑到了所有可能的限定符types,那么可以避免这种情况,但这仍然是更安全的select。

如果您想添加7和10英寸平板电脑的特定布局,请使用以下所有内容:

 res/layout-large res/layout-xlarge res/layout-sw600dp res/layout-sw720dp res/layout-sw800dp 

依此类推您要支持的任何特定设备屏幕宽度。 需要注意的是,sw600支持尽可能小的宽度,因此避免了在设备处于横向时使用屏幕宽度。 使用swxxxdp qualifers是首选,但这些被添加到API 13,所以你仍然需要较大的,更大的xlarge为较旧的Android操作系统。

关于使用dpi,请注意,如果您只为一个大小设置一个密度限定符,例如layout-large-mdpi ,那么与大限定符匹配的任何设备将使用来自这里的布局而不是另一个文件夹,这是到最佳匹配标准,你可以在这里阅读。 它将匹配它作为一个大的设备之前,它将匹配的密度,所以非mdpi密度屏幕仍然会使用这些布局。

为了解决这个问题,你必须包含你所支持的任何其他密度的文件夹,比如上面的例子中的layout-large-hdpi ,并且在这个文件夹中包含你在mdpi文件夹中使用的hdpi版本if你需要他们不同。

避免重复您的布局,当然,不要复制设备独立的布局到每个未使用的文件夹,如果你只需要在res/layout ,尝试只保留需要这些限定符在文件夹中的布局,并妥善组织,使确保您的文件夹按照正确的优先顺序以限定符进行命名,以防止在密度/大小组合中使用错误的文件夹。