2013-03-27 2 views
5

Ecco la situazione: Ho due progetti. Diciamo un LibraryProject e uno MainProject. MainProject fa riferimento alla libreria LibraryProject.Come ottenere una risorsa da un progetto all'interno di un progetto di libreria

Ho una attività nello LibraryProject che deve scoprire se lo MainProject ha definito un drawable specifico, diciamo "logo.png" (Pensa che l'immagine del logo deve essere definita da ciascun `MainProject, e non dal Progetto Biblioteche .

come, in un'attività del LibraryProject, scoprire se il MainProject ha questa immagine nella cartella res/drawable?

Obviouslly ho cercato di vedere se R.drawable.logo != 0 (o variazione di esso), ma come sapete , questa linea non verrà compilata, poiché l'immagine non si trova nella cartella res/drawable dello LibraryProject.

Ho anche provato getResources().getIdentifier("logo", "drawable", null) != 0 ma questa espressione booleana restituisce sempre false, poiché lo .getIdentifier() restituisce sempre zero.

Qualche idea?

risposta

5

si può provare questo: (ma ricordate, il contesto è sempre "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

Grazie! Ha funzionato! Non mi ero reso conto che il contesto sarebbe stato dal MainProject e non da LibraryProject –

+0

Come ottengo il contesto dal progetto della libreria? – Vijay

0

È necessario fornire una risorsa predefinita nel Progetto Biblioteche. Se esiste una risorsa con nome identico nello MainProject, sostituirà la risorsa Progetto di libreria.

Ad esempio, se si fornisce "res/drawable/logo.png" in entrambi i progetti, quindi R.drawable.logo nel Progetto Libreria utilizzerà l'immagine "logo.png" che si trova nella cartella "res/drawable" del mainproject.


Questa risposta non affronta come il Progetto Biblioteche deve scoprire se il progetto principale ha una risorsa, solo come forzare l'uso di esso, se ce n'è uno.

+0

Sono d'accordo con te, ma questo è exactilly quello che non voglio, perché se il mainproject non definisce un risorsa, verrà mostrata la risorsa di LibraryProject e non voglio questo. Se il MainProject non fornisce la risorsa, voglio sapere e fare qualsiasi altra cosa. –

+0

Forse c'è una promessa nella risposta di @ Dale. Ci sarebbero voluti alcuni esperimenti, ma avrei seguito quella strada se fossi nei tuoi panni. Un altro metodo consiste nel creare una risorsa predefinita di dimensioni molto ridotte e archiviare una firma, ad esempio la dimensione in byte, nell'app in modo da poter verificare se è stata trovata la risorsa predefinita di Progetto libreria. In caso contrario, sarebbe presente una risorsa del progetto principale. –

0

Il progetto principale deve passare un contesto alla libreria e chiamare context.getString().