首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从Android图书馆项目访问资源?

从Android图书馆项目访问资源?
EN

Stack Overflow用户
提问于 2015-01-19 16:01:59
回答 1查看 3.5K关注 0票数 13

我正试图建一个图书馆。我在res目录下有一个Android库项目和一些资源,我想在库项目的代码中访问这些资源。Android的文档上写着:

库模块中的源代码可以通过其R类访问自己的资源。

但我就是想不出怎么做。因为它是一个库,打算从其他应用程序中使用,而不是自己运行,所以我没有Activity,所以不能让Context使用getResources()。如何在没有上下文的情况下显式地访问这些资源?

EN

回答 1

Stack Overflow用户

发布于 2017-01-06 00:57:42

如果没有活动,就不可能使用R类。如果在库中有测试应用程序,则测试应用程序将能够访问R,但不能访问库本身。

不过,您仍然可以按名称访问资源。例如,我的图书馆里有一个这样的类,

代码语言:javascript
代码运行次数:0
运行
复制
public class MyContext extends ContextWrapper {
  public MyContext(Context base) {
    super(base);
  }

  public int getResourceId(String resourceName) {
    try{
        // I only access resources inside the "raw" folder
        int resId = getResources().getIdentifier(resourceName, "raw", getPackageName());
        return resId;
    } catch(Exception e){
        Log.e("MyContext","getResourceId: " + resourceName);
        e.printStackTrace();
    }
    return 0;
  }
}

(有关https://stackoverflow.com/a/24972256/1765629的更多信息,请参见ContextWrappers)

库中的对象的构造函数采用上下文包装器,

代码语言:javascript
代码运行次数:0
运行
复制
public class MyLibClass {
  public MyLibClass(MyContext context) {
    int resId = context.getResourceId("a_file_inside_my_lib_res");
  }
}

然后,在使用lib的应用程序中,我必须传递上下文,

代码语言:javascript
代码运行次数:0
运行
复制
public class MyActivity extends AppCompatActivity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    MyLibClass a = new MyLibClass(new MyContext(this));
  }
}

MyContext、MyLibClass和a_file_inside_my_lib_res,它们都生活在库项目中。

希望能帮上忙。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28028741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档