gpt4 book ai didi

由于宽度和高度,未找到 Android 资源

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:10:00 25 4
gpt4 key购买 nike

我最近在商店中发布了一款 Android 应用程序,它几乎适用于我所有的用户。然而,我很快开始每周收到一些崩溃报告,其中包含以下跟踪信息:

Caused by: android.content.res.Resources$NotFoundException: File res/drawable-xhdpi/dark_button_unpressed.png from drawable resource ID #0x7f02005d
at android.content.res.Resources.loadDrawable(Resources.java:1716)
at android.content.res.Resources.getDrawable(Resources.java:581)
at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:162)
at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:787)
at android.graphics.drawable.Drawable.createFromXml(Drawable.java:728)
at android.content.res.Resources.loadDrawable(Resources.java:1696)
... 40 more
Caused by: java.lang.IllegalArgumentException: width and height must be > 0
at android.graphics.Bitmap.nativeCreate(Native Method)
at android.graphics.Bitmap.createBitmap(Bitmap.java:477)
at android.graphics.Bitmap.createBitmap(Bitmap.java:444)
at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:349)
at android.graphics.BitmapFactory.finishDecode(BitmapFactory.java:498)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:473)
at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:336)
at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:697)
at android.content.res.Resources.loadDrawable(Resources.java:1711)
... 45 more

要确定这里到底发生了什么并不容易。我唯一能从用户报告中收集到的是,它似乎主要发生在低密度显示器的设备上。此特定资源用作 XML UI 中 View 的背景。

最佳答案

这里的问题是由 Android 中可绘制资源的自动缩放和非常小的可绘制对象的不幸组合引起的。

例如,如果您的应用仅提供 drawable-xhpdi 资源,则需要缩小它们的尺寸以适应较低密度的屏幕。如果您不自己提供这些资源,Android 会自动完成此操作。

显示密度的比例设置如下:

  • xhdpi:2.0
  • hdpi: 1.5
  • mdpi:1.0
  • ldpi:0.75

这意味着您的 xhdpi 资源在中密度显示器上按比例缩小了 2.0 倍。这可能不利于质量,这就是为什么通常建议您自己创建和提供这些低密度资源的原因。

现在,回到手头的问题。拥有非常小的宽度或高度(1 或 2 像素)的资源并不少见。用例的一个示例是为 View 提供纯色背景。

不幸的是,当以 xhdpi 的形式提供这些资源并缩小它们时,像素大小可能会被截断为 0。没有为此设置保护措施,Android 将无法用它创建位图维度和崩溃。

有几种解决方案:

  • 将资源包含为 ldpi 并将其放大,这不会影响作为背景的目的。
  • 将资源包含为 nodpi 可绘制对象,它永远不会缩放。
  • 改用 XML 资源。

最后一个选项最准确地描述了 Intent ,并允许您稍后在没有图像编辑程序的情况下轻松更改颜色:

<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">

<solid android:color="#AARRGGBB" />
</shape>

将此资源包含在 drawables 文件夹中,它将始终正常工作。

关于由于宽度和高度,未找到 Android 资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15428441/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com