当前位置: 首页 > 知识库问答 >
问题:

如果使用可绘制的引用,则无法缩放缺失的密度桶

龚苏燕
2023-03-14

首先,一些我正在做的事情的背景。如果你熟悉一般的参考文献(简单的概念),请跳到第2节。

通常,我们在文件夹中使用可绘制的mdpi、可绘制的hdpi等。例子:

/drawable-mdpi
    ./figure.png (24x24 pixels)
/drawable-hdpi
    ./figure.png (36x36 pixels)
[...]

然而,另一种实现方法(相同?)行为是在可绘制节点PI内定义不同大小的相同可绘制节点,然后通过可绘制引用引用mdpi值、hdpi值等中的每个大小。例子:

/drawable-nodpi
    ./figure_24.png
    ./figure_36.png
/values-mdpi
    ./refs.xml
/values-hdpi
    ./refs.xml

每个<代码>参考。xml文件应该包含这样的行(例如mdpi/refs.xml):

<item name="figure"
    type="drawable">@drawable/figure_24</item>

这样,您可以引用相同的R.drawable。图如无参考文献所示。我发现,当您需要在不调整大小的情况下处理不同大小的同一图像(例如,在24/36/48/72和48/72/96/144中使用同一图像)时,这很有用,因为您可以在不复制图像的情况下引用同一图像两次(例如,再次引用48和72px图像)(从而避免apk大小膨胀)。

众所周知,Android不需要所有的存储桶密度来正确显示可绘制图像[1]。例如,您可以完全省略可绘制ldpi,它将加载和缩放其他可绘制文件夹中的ldpi,并在测试密度中以适当的大小呈现给您。事实上,许多应用程序(包括来自谷歌的应用程序)已经省略了ldpi,没有人注意到。

然而,我注意到,当使用可绘制引用时(请参见上文第1节),这种行为会发生变化。如果省略密度文件夹中的参考xml文件,并尝试在该密度中显示该可绘制文件,Android将检索最高密度的可绘制变化,但不会根据该密度调整其大小。

让我举一个例子来让它更清楚:如果使用引用的可绘图项,我省略了ldpi/refs值。在xml中,Android将从xxhdpi值(我为这个任意可绘制文件提供的最高值)中检索可绘制文件,并以对应于xxhdpi的大小而不是ldpi的大小显示。因此,ldpi设备中显示的任何布局都将具有巨大的图像。见下图:

A) 即使缺少LDPI可抽电缆,普通可抽电缆也可以正常工作:

A) 如果缺少一个密度引用,则引用的可绘图项不起作用(我没有在ldpi/refs.xml值中提供显式变体):

共有1个答案

房光临
2023-03-14

没关系,我现在在一个ldpi模拟器中进行了测试,它可以正常工作。因此,这是那些只影响IDE中布局预览窗格的错误之一。

是的,我应该在询问之前在ldpi模拟器中进行测试。:)

 类似资料:
  • 我为不同的密度创建了res可绘制目录,但应用程序总是使用最低密度。我创建了可绘制的mdpi、可绘制的hdpi、可绘制的xhdpi和可绘制的xxhdpi,但在我的手机中使用了使用mdpi的xxhdpi应用程序,如果我删除了mdpi,则使用hdpi等删除应用程序。

  • 我有一个“长”格式的数据框,它包含两列:第一列值,第二列性别[Male-1/Female-2]。我编写了一些代码来制作整个数据集的直方图(下面的代码)。 但是,我还想在直方图上添加一个密度,以强调性别之间的差异,即我想组合3个图:整个数据集的直方图,以及每个性别的2个密度图。我尝试使用一些示例(一、二、三、四),但仍然不起作用。“密度”代码仅起作用,而“历史密度”的组合不起作用。 P. S.一些例

  • 对于每个android可绘制屏幕密度(hdpi、ldpi、xhdpi等),建议采用什么方法缩放图像?我们应该使用源图像分辨率作为最高密度(xxhdpi)的分辨率,并从那里开始缩放吗?在我的例子中,我明确地将布局中的图像大小设置为50 x 50 dp,那么我是否应该缩放可绘制图像,使我的mdpi为50x50,并以此为基础确定其他分辨率? 附言:为什么我们必须手动缩放绘图,如果它们在放置时无论如何都会

  • 我正在尝试为我的应用程序的主题定义自定义颜色。我是这样做的: 定义自定义属性: 定义应用程序样式: 在清单中设置样式: 在可绘制xml中使用此属性: 但出于某种原因,它不适用于我的颜色绘图。它应用了透明的颜色。 还有一件奇怪的事,如果我替换我的与,在,则应用正确的颜色。 最后一个问题是:你知道为什么它不起作用,以及如何修复它吗?

  • 问题内容: 我有以下查询: 结果如下: 表格具有,以及其他一些列,但此处仅与之相关。上面的查询为我提供了在给定时间段内生成的最后一个事件(由于每个周期都得到了很好的汇总)。 现在,如果在给定的时间段内未发生任何事件,此查询将产生。我希望它返回以前的可用时间,即使它来自不同的时间段。IE: 我确信我缺少一些简单的方法来完成此任务。有什么建议吗? 问题答案: 尝试: 如果太慢-告诉我。我会给你一个更快

  • 我们已经用jpackage打包了我们的应用程序,它工作得很好。 不知何故,有人无意中从安装目录中删除了主jar。从那时起,'。“exe”无法启动(显然)。问题是它没有显示任何类型的错误消息,所以我们花了一段时间才意识到出了什么问题。 有没有办法让exe至少显示一些有用的错误消息?