Android 资源别名(alias resources)使用小记

第一次写文章,主要是分享一下,在网上搜索了很久发现没有相关文章,有不好的地方请大家指出。

Android 开发者官网 得知到资源别名的使用。

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/icon_ca" />

如果将此文件另存为 icon.xml(例如,在备用资源目录中,另存为 res/drawable-en-rCA/),则会编译到可作为 R.drawable.icon 引用的资源中,但实际上它是 R.drawable.icon_ca 资源(保存在 res/drawable/ 中)的别名。

今天工作的时候需要在平板使用 xxxhdpi 的图片,所以为了复用资源,使用这种方式来复用图片。原图片放在 drawable 文件夹中,结果在 xhdpi 的手机上测试发现 Bitmap 比原图大了两倍,经过一段时间的阅读源码,发现
Context.getDrawable() 如果是 xml 的资源最终还是会通过 BitmapFactory 来 decode 图片,结果从 src 解析的图片位于 drawable 下(推测该默认文件的 density 为160),手机 density 为 320,从而被放大了 320/160 = 2倍。

解决方法:如果在 drawable-hpi 这类适配的文件中使用资源别名,请将原图放在 drawable-nodpi 中。

途中发现的一些问题:
1.硬件加速开启的情况下,如果 Bitmap 太大,会触发硬件加速对 Bitmap 大小的限制,无法显示图片,也没有
Crash, 只有 warn 级别的 Logcat。而且每个手机对其的限制都不一样。

   OpenglRender : Bitmap too large to be uploaded into a texture (440x6405, max=4096x4096)

详细解决方法可以参考 CSDN David-Kuper 的文章 Android 大图绘制——硬件加速限制分析与方案

2.这种使用方式如果再次用在类似的 XML 资源文件中,会无法找到资源而抛出 NotFoundException。比如

<layer-list>
    <bitmap xmlns:android="http://schemas.android.com/apk/res/android"
        android:src="@drawable/icon" />
</layer-list>
    原文作者:周公在世
    原文地址: https://www.jianshu.com/p/f29833988fcd
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞