正文
下面讲述对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());
}
}
而在Sample中,展示一个Activity,其中有两个Button和两个ImageView,点击Button会分别调用这两个SampleLib的接口,并展示图片。布局代码很简单,就不贴了,下面是Activity的代码:
package com.leo.sample;
import com.leo.sample.R;
import com.leo.sample.lib.TestUtils;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
public class MainActivity extends Activity {
ImageView ivLogo1;
ImageView ivLogo2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ivLogo1 = (ImageView) findViewById(R.id.iv_logo1);
ivLogo2 = (ImageView) findViewById(R.id.iv_logo2);
}
public v