2012-08-30 3 views
0

Il y a quelque chose de magique dans un de mes projets de bibliothèque. Alors que les mises en page (res/layout) sont extraites du projet de bibliothèque lui-même, les fichiers du dossier assets sont extraits du projet appelant (pas le projet de bibliothèque).Quels actifs sont utilisés dans le projet Bibliothèque?

Je suis en train de créer une activité d'aide dans un projet de bibliothèque. Le projet appelant donne un nom de fichier à l'activité dans le projet de bibliothèque. Les fichiers sont stockés dans le projet appelant - pas dans le projet de bibliothèque. Lors de l'utilisation de AssetsManager dans le projet de bibliothèque, il utilise les fichiers du projet appelant, et non ceux du dossier assets du projet de bibliothèque.

Est-ce correct?

Voici le dépouillé appelant activité dans le projet racine:

// Calling Project 
package aa.bb.aa; 

public class MyListActivity extends ListActivity { 

    @Override 
    public void onCreate(Bundle bundle) { 
     super.onCreate(bundle); 

     setContentView(R.layout.mylistactivity); // <--- Stored in resources of the calling project 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem menuItem) { 
     if (menuItem.getItemId() == R.id.men_help) { 
      Intent intent = new Intent(this, aa.bb.bb.MyFileBrowser.class); 
      intent.putExtra(MyConstants.FILE, "mylistactivity.html"); // <-- Stored in assets of the calling project 
      startActivityForResult(intent, MyConstants.DIALOG_HELP); 
      return true; 
     } 

     return super.onOptionsItemSelected(menuItem); 
    } 
} 

Et est ici l'activité dans le projet de bibliothèque. Je pensais que les actifs sont extraites d'ici et non pas de l'activité d'appel/Projet:

// Library project 
package aa.bb.bb; 

    public class MyFileBrowser extends Activity { 

     @Override 
     public void onCreate(Bundle bundle) { 
      super.onCreate(bundle); 

      setContentView(R.layout.myfilebrowser); // <-- Stored in resources of the library project 

      webView = (WebView) findViewById(R.id.browser); 

      Locale locale = Locale.getDefault(); 
      String localeLanguage = (locale.getLanguage() != null) ? locale.getLanguage() : "en"; 

      Bundle bundleExtras = getIntent().getExtras(); 
      if (bundleExtras != null) { 
       String file = bundleExtras.getString(MyConstants.FILE); 
       if (!StringUtils.isEmpty(file)) { 
        String filename = "help-" + localeLanguage + File.separator + file; 

        AssetManager assetManager = getAssets(); 
        InputStream inputStream = null; 
        try { 
         inputStream = assetManager.open(filename); 
        } catch (IOException ioException) { 
         filename = "help-en" + File.separator + file; 
        } finally { 
         try { 
          if (inputStream != null) { 
           inputStream.close(); 
          } 
         } catch (IOException ioException) { 
         } 
        } 

        webView.loadUrl("file:///android_asset" + File.separator + filename); // <-- Uses file in assets of calling project - not library project 
       } 
      } 
     } 
    } 

Répondre

0

a trouvé la réponse. les actifs sont toujours utilisés à partir du projet de référencement. Un projet de bibliothèque ne peut pas contenir d'actifs. Je l'ai trouvé sur cette page:

Library Projects

est ici la partie du document qui ne décrit ceci:

Les outils ne prennent pas en charge l'utilisation des fichiers d'actifs bruts (enregistré dans les actifs/directory) dans un projet de bibliothèque. Toutes les ressources d'actif utilisées par une application doivent être stockées dans le répertoire assets/du projet d'application lui-même. Toutefois, les fichiers de ressources enregistrés dans le répertoire res/ sont pris en charge.

Questions connexes