2013-03-27 13 views
5

Oto sytuacja: Mam dwa projekty. Powiedzmy, że LibraryProject i MainProject. MainProject odwołuje się do LibraryProject jako biblioteki.Jak uzyskać zasób z projektu wewnątrz projektu biblioteki

Mam jedną czynność w LibraryProject, która musi wykryć, czy MainProject zdefiniował określony wyciąg, powiedzmy "logo.png" (Pomyśl, że obraz logo musi być zdefiniowany przez każdy "Główny projekt, a nie przez LibraryProject .

jak w jednej aktywności LibraryProject, odkryć, jeśli MainProject ma ten obraz w folderze res/drawable?

Obviouslly próbowałem sprawdzić, czy R.drawable.logo != 0 (lub odchylenie od niego), ale jak wiesz , ta linia nie będzie się kompilować, ponieważ obraz nie znajduje się w folderze z LibraryProject.

Próbowałem również getResources().getIdentifier("logo", "drawable", null) != 0, ale to wyrażenie logiczne zawsze zwraca false, ponieważ .getIdentifier() zawsze zwraca zero.

Każdy pomysł?

Odpowiedz

5

Można spróbować to: (ale należy pamiętać, że kontekst jest zawsze „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

Dzięki! To się udało! Nie zdawałem sobie sprawy, że kontekst będzie pochodził z projektu głównego, a nie z biblioteki projektu. –

+0

Jak uzyskać kontekst z projektu biblioteki? – Vijay

0

Musisz podać domyślny zasób w projekcie bibliotecznym. Jeśli w Twoim MainProject znajduje się zasób o identycznej nazwie, zastąpi on zasób projektu bibliotecznego.

Na przykład, jeśli w obu projektach podano "res/drawable/logo.png", wówczas w projekcie bibliotecznym R.drawable.logo będzie używany obraz "logo.png" znajdujący się w folderze "res/drawable". Główny projekt.


Ta odpowiedź nie rozwiązuje jak Biblioteka Projekt powinien odkryć, jeśli projekt ma główny zasób, tylko w jaki sposób wymusić korzystanie z niego, jeśli taki istnieje.

+0

zgadzam się z tobą, ale to exactilly czego nie chcę, bo jeśli MainProject nie definiuje resource, zasób LibraryProject zostanie wyświetlony i nie chcę tego. Jeśli MainProject nie zapewnia zasób, chcę wiedzieć i zrobić cokolwiek innego. –

+0

Być może jest obietnica w odpowiedzi @ Dale'a. Wymagałoby to trochę eksperymentowania, ale podążałbym tą drogą, gdybym był w twoich butach. Inną metodą byłoby utworzenie bardzo małego domyślnego zasobu i zapisanie w aplikacji sygnatury, takiej jak rozmiar bajtów, aby można było przetestować, czy zasób domyślny biblioteki projektu został znaleziony. W przeciwnym razie obecny byłby zasób Główny projekt. –

0

Niech twój główny projekt przepuści Kontekst do biblioteki i wywołaj context.getString().

Powiązane problemy