gpt4 book ai didi

android - 从 Android 库项目访问资源?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:15:17 26 4
gpt4 key购买 nike

我正在尝试构建一个库。我有一个 Android 库项目和 res 目录下的一些资源,我想在库项目的代码中访问这些资源。 Android 文档说:

source code in the library module can access its own resources through its R class

但我只是不知道该怎么做。因为它是一个库,旨在供其他应用程序使用,而不是自行运行,所以我没有 Activity,所以我无法获得 Context 来使用 getResources ()。如何在没有上下文的情况下显式访问这些资源?

最佳答案

没有Activity,似乎无法使用R类。如果您的库中有测试应用程序,测试应用程序将能够访问 R,但不能从库本身访问。

不过,您仍然可以通过名称访问资源。例如,我的库中有一个这样的类,

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;
}
}

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

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

public class MyLibClass {
public MyLibClass(MyContext context) {
int resId = context.getResourceId("a_file_inside_my_lib_res");
}
}

然后,从使用该库的应用程序,我必须传递上下文,

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,它们都位于库项目中。

希望对你有帮助。

关于android - 从 Android 库项目访问资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28028741/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com