如何正确包含10“和7”布局

时间:2013-02-26 13:47:23

标签: android layout tablet dpi

Nexus 7:7“1280x800

Galaxy tab 10.1 10“1280x800

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

用于7英寸片剂

  • layout-sw600dp
  • 布局sw600dp端口

用于10英寸的片剂

  • layout-sw720dp
  • 布局sw720dp端口

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

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

  • 布局
  • 布局端口

10“galaxy tab从这些加载布局。

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

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

编辑:格式化

4 个答案:

答案 0 :(得分:58)

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

我尝试过,仅使用sw600dp和sw720dp文件夹。我仍然不知道为什么他们不工作,但我不在乎。我无论如何都不能使用swxxxdp< 3.2,所以搞砸了。

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

布局这是默认设置,即使您不打算支持手机也需要它!

适用于7英寸平板电脑的

layout-large (适用于模拟器和nexus7)

适用于10英寸平板电脑的

layout-xlarge (适用于模拟器和galaxytab10.1)

Other people也得出了同样的结论。

答案 1 :(得分:21)

我的申请中也遇到了这样的问题。但我找到了一个很好的解决方案。 我只有tablet的一个布局,目录名是layout-sw600dp。 现在,当部分出现高度和宽度问题时,我创建了几个不同的values目录,其中我放置了dimensionsfont size以及其他存根。因此,平板电脑屏幕的constant中不会有layout值。

androd:layout_width:"60dp" // i drop this scenario

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

并且您的values目录名称将类似于

values-xlarge
values-large

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

以下是Developer.android网站的字词。 配置示例

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

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-normal-xlarge。不是使用layout-large-mdpilayout-large-ldpi进行不同的识别,而是仅仅通过其smallest width来识别?因为,android为不同的图像提供drawables目录,只有它的解决方案。你有上面的解决方案。

修改

然后你必须开发不同的布局。别无选择。我在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)

答案 2 :(得分:2)

是的,您应该使用与布局相关的文件夹,但也要确保任何与设备无关的布局都在res / layout文件夹中。

Android开发者网站上提到了这一点,但要重申他们的观点,如果您的布局仅在支持大型和普通大小的设备的应用程序的layout-xlarge文件夹中可用,则该应用程序将崩溃因为较小的设备将无法找到该资源的任何匹配项。

这是一个很好的文件夹结构,以:

开头
res/layout

保持与设备无关的布局,如果要考虑所有可能的限定符类型,可以避免这种情况,但这仍然是更安全的选择。

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

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

对于您要支持的任何特定设备屏幕宽度等等。应该注意的是,sw600支持尽可能小的宽度,因此避免在设备保持横向时使用屏幕宽度。使用swxxxdp限定符是首选,但这些是在API 13中添加的,因此对于较旧的Android操作系统仍然需要较大的xlarge。

关于dpi的使用,请注意,如果您只为一个大小设置一个密度限定符,例如layout-large-mdpi,那么匹配大限定符的任何设备都将使用此处的布局而不是另一个文件夹,这是由于最佳匹配条件,您可以阅读here。在匹配密度之前,它会将其匹配为大型设备,因此非mdpi密度屏幕仍将使用这些布局。

要解决此问题,您必须包含您支持的任何其他密度的文件夹,因此layout-large-hdpi继续上面的示例,并在此文件夹中包含您在其中使用的hdpi版本的布局mdpi文件夹,如果你需要它们是不同的。

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

答案 3 :(得分:1)

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

应该由Nexus 7选择sw600dp限定符。
如果可用,应通过Galaxy Tab选择sw720dp限定符。

在尝试找到合适的布局时,您确定它会崩溃吗? Android可能会找到正确的布局,但布局xml文件中的某些内容可能会丢失,并且崩溃是由此造成的。