簡體   English   中英

從Android庫項目訪問資源?

[英]Accessing resources from Android library project?

我正在嘗試建立一個圖書館。 我有一個Android庫項目和res目錄下的一些資源,我想在庫項目的代碼中訪問它。 Android文檔說:

庫模塊中的源代碼可以通過其R類訪問自己的資源

但我無法弄清楚如何做到這一點。 因為它是一個庫,打算從其他應用程序中使用,而不是自己運行,所以我沒有Activity ,所以我無法使用getResources()來獲取Context 如何在沒有上下文的情況下顯式訪問這些資源?

沒有Activity,似乎不可能使用R類。 如果您的庫中有測試應用程序,測試應用程序將能夠訪問R,但不能訪問lib本身。

您仍然可以按名稱訪問資源。 例如,我的庫中有一個這樣的類,

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

然后,從使用lib的應用程序,我必須傳遞上下文,

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,它們都存在於庫項目中。

我希望它有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM