【问题标题】:Android: access a drawable from a specific -dpi folder?Android:从特定的 -dpi 文件夹访问可绘制对象?
【发布时间】:2012-08-28 18:32:08
【问题描述】:

我有两个可绘制文件夹:drawable-mdpi 和 drawable-ldpi

我想保留这个结构(即我不想将我的图像移动到 /assets),以便 Android 会根据设备密度自动选择合适的图稿,但是,有时我需要访问较小设备上的较大可绘制版本。

有没有办法从代码中访问 drawable-ldpi 文件夹?我认为以下可能是答案,但它不起作用:

    Uri path = Uri.parse("android.resource://com.example.test/res/drawable-ldpi/icon");
    imageview.setImageURI(path); //assume imageview is already initialized etc.

我收到 java.io.FileNotFoundException(没有这样的文件或目录)警告(它不会崩溃,但也不会加载)。

非常感谢您的帮助!

【问题讨论】:

  • 不,无法按照您需要的方式访问。
  • 所以我最好的办法是将我所有的图像加载到 assets 文件夹中,而不是使用内置检测的 androids,手动检测屏幕密度,并加载相应的图像。更烦人,但至少我可以根据需要访问 hdpi 版本?

标签: android resources drawable


【解决方案1】:

可能帮助不大,但有 Resources.getDrawableForDensity() 但这适用于 API 15 :-(

【讨论】:

    【解决方案2】:

    一般来说,如果您需要使用 HDPI 版本,请只保留 HDPI 版本的图像,而低密度手机将自动使用 HDPI 可绘制对象,因为它别无选择(即具有该可绘制对象名称的低分辨率图像)不存在)。

    如果您确实需要在 hdpi 和 mdpi 版本之间切换,我建议您使用不同的文件名并以编程方式进行交换,或者如果您更喜欢这样做,可以显示/隐藏 XML 元素......但这似乎有点笨拙.

    【讨论】:

    • 我确实需要使用mdpi,因为我正在加载许多图像,并且使用hdpi会导致VM OOM错误。
    • 那么您希望在什么情况下使用 HDPI 图像?为什么不简单地拥有两个可绘制对象并在需要使用 mdpi 的情况下交换它们?
    • 我想用较小的图像加载屏幕。选择图像后,我想显示该图像的较大版本。如果我加载 hdpi 版本并将它们按比例缩小以适应较小的屏幕,则会出现 OOM 错误。
    • 如何何时选择图像,加载该图像的HDPI版本?这可以通过命名 mdpi drawable pic_mdpi.png 和 hdpi pic_hdpi.png 来完成,然后当用户选择图像时,以编程方式将视图的背景资源或源(取决于视图的类型)设置为 pic_hdpi drawable。
    • 对,但这会阻止我让 Android 自动检测设备 dpi 并加载适当的可绘制对象。听起来我必须手动处理所有这些。
    【解决方案3】:
    ImageView image = (ImageView)findViewById(R.id.imageView);
    Bitmap bm = BitmapFactory.decodeResource(getResources(),R.drawable.abc);
    image.setImageBitmap(bm);
    

    尝试阅读THIS LINK 以了解有关 hdpi 和 mdpi 概念的更多研究

    【讨论】:

    • 这将使用系统的正常资源分辨率,因此不会为您提供更大的图像。
    猜你喜欢
    • 1970-01-01
    • 2012-05-31
    • 2016-11-10
    • 1970-01-01
    • 1970-01-01
    • 2012-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多