如何在drawable xml文件中为不同分辨率添加多个可绘制目录

时间:2016-10-02 20:38:58

标签: android xml android-layout

我有一个多个可绘制目录,因为不同的分辨率,如Drawable用于移动布局,Drawable-xxhdpi用于Tablet布局。在Drawable-xxhdpi的XML文件中,只有可绘制文件的维度从Default Drawable目录(高,重,填充等)更改。

当我是构建项目时,它显示了重复资源的错误,因为不同目录中的Drawable文件的名称相同。

那么告诉我该怎么办? 我必须把Tablet版本的Drawable意味着Drawable-xxhdpi?

或者告诉我是否有其他方式可以构建Mobile和Tablet版本。

错误是:

  

[drawable-xxhdpi-v4 / icon_loose] E:\ Android Projects \ Daily Backup \ WMS \ MarkTeqWms_12_03_2016 \ app \ src \ main \ res \ drawable \ icon_loose.xml [drawable-xxhdpi-v4 / icon_loose] E:\ Android Projects \ Daily Backup \ WMS \ MarkTeqWms_12_03_2016 \ app \ src \ main \ res \ drawable-xxhdpi \ icon_loose.xml:错误:资源重复

在图片中我显示我有那些目录,就像layout-xxhdpi我想使用Drawable-xxhdpi:

enter image description here

2 个答案:

答案 0 :(得分:0)

Android无法自动判断设备是平板电脑还是手机。将文件放在drawable-xxhdpi中并不意味着它只会由平板电脑呈现。它只表示分辨率与xxhdpi相对应的设备将搜索此文件夹中的资源。理论上,这些设备可以是任何运行Android(手机,平板电脑,电视,手表)的设备。

要实现您的目标,您必须自己定义您认为的平板电脑。例如,如果您认为任何宽度大于或等于600dp的设备应被视为平板电脑,那么您应该将相应的资源放在具有资格" sw600dp"的资源文件夹中。例如。 drawable-sw600dplayout-sw600dp

我建议您从Android官方文档Supporting Multiple Screens了解更多相关信息。

答案 1 :(得分:0)

叹息另一个可怜的灵魂造成了DPI桶的混乱......知道密度桶(ldpi,mdpi,hdpi等)专门针对像素相关资产而存在。为什么?因为有太多的设备可能有很多不同的DENSITIES(密度!=大小顺便说一句),事实上你无法知道将运行你的布局的设备的确切DPI。因此,您需要一些方法来确保您的图形在所有屏幕上看起来都很好。

达达达DUNNN形成密度桶。现在实际上一个设备很可能会运行一些奇怪的DPI,例如我的手机是258DPI,Android操作系统将我的设备视为258DPI手机。不是作为“hdpi”手机...实际上,因为我们永远不会知道设备的实际dpi,我们只能假设它将存在于少数广义状态(ldpi,mdpi等)之一,因此,通过设计我们的自定义根据这些桶的图形,我们可以确保运行我们图形的任何手机都不会显示我们图像的像素化版本。

现在要记住的是,密度桶只不过是解决整体问题的胶带解决方案。需要注意的是,该解决方案确实有效,但它只有一个用途,那就是当我们需要自定义缩放任何依赖于像素的资产时。虽然许多人不理解桶如何工作,以及它们为什么存在(由于代表谷歌的教学不好),他们认为密度是最终所有解决方案都支持许多屏幕。 (因此你指定layout-xxhdpi的原因)。虽然改变基于密度的布局是不必要的,因为如前所述,对于Android操作系统,手机的密度正是它的精确度。没有任何特定的“桶”。因此,它将使用基于设备的字面DPI的比例因子。因此,无论设备密度如何,确保例如任何设备上的25dp将占用相同的空间百分比。

最后要注意的是,虽然设备的DPI仅用于决定图形的像素大小,但屏幕SIZE(记住密度与大小不同)将产生巨大差异。例如。一些设备的宽度为320dp,而其他设备的宽度为480dp。因此,只有在需要根据给定的可用空间添加/删除/更改布局时,才需要更改布局。

Tl:DR密度桶是管道胶带解决方案。尊重他们,但不相信他们是多屏幕支持的解决方案。其次,DP单元可以扩展到任何密度设备并占据相同的空间百分比,最后在设计多个屏幕时,我们实际上设计了多个屏幕尺寸而不是密度。