Android开发中R资源引用注意事项

本文探讨了Android开发中关于R资源引用的注意事项,包括直接引用R与代码方式获取资源ID的区别,以及在导入SDK或jar包时可能出现的问题。通过示例分析,作者提出了避免资源引用错误的解决方案,并给出了在Android Studio中的类似情况。建议开发者在开发SDK时使用代码获取资源ID,以确保兼容性。
摘要由CSDN通过智能技术生成

我们都知道,在Android打包时进行的aapt是对Android的资源打包,从而生成一个R.java文件,其中包括非assets下的所有资源的id值,同时还生成resource.arsc文件,也就是资源索引表。

而我们程序在运行中,就是从R.java获取具体的id值,再到resource.arsc检索获取相对应的资源。

这文章不是讲Android资源打包的过程,这在老罗的《Android应用程序资源的编译和打包过程分析》(https://blog.csdn.net/luoshengyang/article/details/8744683) 一文讲的非常详细(反正我看得晕头转向),而是讲我们平时开发中对Android资源引用的几点注意事项。

由于个人的电脑渣渣和对Eclipse的项目结构更了解,所以我本篇文章的demo是在Eclipse上编写的。但Eclipse上和Android Studio上资源引用是一样的,只是R.java的目录变了,后面也会涉及到Android Studio上的一些问题。

下面讲述对R资源引用的一些个人结论,也是我曾经踩过的坑,对于SDK开发的小伙伴或经常接入第三方SDK的小伙伴可能会比较了解,希望对大家有所帮助和借鉴。

先说下demo的结构:demo有两个项目,一个Sample和一个SampleLib,Sample直接引用SampleLib或导入SampleLib的jar包,从而使用SampleLib里所定义好的接口。由于这个demo只是为了测试R资源引用的注意事项,所以demo非常简单。

在SampleLib只有一个类,类中只包含两个接口,分别是通过直接引用R和代码方式返回一张在drawable里的图片“test”的id:

package com.leo.sample.lib;
![Uploading drawable下的test图片_504217.jpg . . .]
​
import android.content.Context;
import com.leo.sample.lib.R;
​
public class TestUtils {

    public static int getImageIdByReference() {
        return R.drawable.test;
    }
​
    public static int getImageIdByCode(Context context) {
        return getDrawableId(context, "test");
    }

    private static int getDrawableId(Context context, String name) {
        return getId(context, name, "drawable");
    }

    private static int getId(Context context, String name, String type) {
        return context.getResources().getIdentifier(name, type, context.getPackageName());
    }
}

file drawable下的test图片

而在Sample中,展示一个Activity,其中有两个Button和两个ImageView,点击Button会分别调用这两个SampleLib的接口,并展示图片。

布局代码很简单,就不贴了,下面是Activity的代码:

p
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值