2013-03-27 70 views
5

Đây là tình huống: Tôi có hai dự án. Giả sử LibraryProjectMainProject. Số MainProject tham chiếu đến LibraryProject làm thư viện.Cách lấy Tài nguyên từ một dự án bên trong một dự án thư viện

Tôi có một hoạt động trong số LibraryProject cần khám phá nếu MainProject đã xác định có thể vẽ cụ thể, giả sử "logo.png" (Hãy nghĩ rằng hình ảnh logo phải được xác định bởi mỗi `Dự án chính chứ không phải bởi LibraryProject .

làm thế nào để, trong một hoạt động của LibraryProject, khám phá nếu MainProject có hình ảnh này trong thư mục res/drawable?

Obviouslly tôi đã cố gắng để xem nếu R.drawable.logo != 0 (hoặc biến thể của nó), nhưng như bạn biết , dòng này sẽ không biên dịch, vì hình ảnh không nằm trong thư mục res/drawable của LibraryProject.

Tôi cũng đã thử getResources().getIdentifier("logo", "drawable", null) != 0 nhưng biểu thức boolean này luôn trả về false, vì .getIdentifier() luôn trả về 0.

Bất kỳ ý tưởng nào?

Trả lời

5

Bạn có thể thử điều này: (nhưng hãy nhớ rằng, bối cảnh luôn luôn là "ChildProject")

public static Drawable getDrawable(Context context, String resource_name){ 
    try{ 
     int resId = context.getResources().getIdentifier(resource_name, "drawable", context.getPackageName()); 
     if(resId != 0){ 
      return context.getResources().getDrawable(resId); 
     } 
    }catch(Exception e){ 
     Log.e(TAG,"getDrawable - resource_name: "+resource_name); 
     e.printStackTrace(); 
    } 

    return null; 
} 
+0

Cảm ơn! Điều đó đã hiệu quả! Tôi đã không nhận ra rằng bối cảnh sẽ là từ MainProject và không phải từ de LibraryProject –

+0

Làm thế nào để tôi nhận được bối cảnh từ dự án thư viện? – Vijay

0

Bạn cần cung cấp tài nguyên mặc định trong Dự án thư viện. Nếu có một tài nguyên có tên giống hệt nhau trong số MainProject của bạn, nó sẽ ghi đè lên tài nguyên Dự án Thư viện.

Ví dụ: nếu bạn cung cấp "res/drawable/logo.png" trong cả hai dự án, thì R.drawable.logo trong Dự án thư viện sẽ sử dụng hình ảnh "logo.png" nằm trong thư mục "res/drawable" của MainProject.


Câu trả lời này không đề cập đến cách thức Dự án Thư viện nên khám phá nếu Main Project có một nguồn tài nguyên, chỉ có cách để buộc sử dụng nó, nếu có.

+0

Tôi đồng ý với bạn, nhưng đây là exactilly những gì tôi không muốn vì nếu MainProject không xác định một tài nguyên, tài nguyên của LibraryProject sẽ được hiển thị và tôi không muốn điều này. Nếu MainProject không cung cấp tài nguyên tôi muốn biết và làm bất cứ điều gì khác. –

+0

Có lẽ có lời hứa trong câu trả lời của @ Dale. Nó sẽ mất một số thử nghiệm, nhưng tôi sẽ đi theo con đường đó nếu tôi ở trong đôi giày của bạn. Một phương pháp khác là tạo một tài nguyên mặc định rất nhỏ và lưu trữ một chữ ký, chẳng hạn như kích thước byte, trong ứng dụng của bạn để bạn có thể kiểm tra xem tài nguyên mặc định của Dự án Thư viện đã được tìm thấy chưa. Nếu không, một nguồn dự án chính sẽ có mặt. –

0

Để dự án chính của bạn chuyển một Ngữ cảnh tới thư viện và gọi context.getString().

Các vấn đề liên quan