2012-08-30 78 views
0

我的一個圖書館項目中有一些神奇的事情發生。雖然佈局(res/layout)是從庫項目本身獲取的,但assets文件夾中的文件是從調用項目(而不是庫項目)中獲取的。圖書館項目中使用了哪些資產?

我目前正在建立一個圖書館項目的幫助活動。調用項目爲庫項目中的活動提供文件名。這些文件存儲在調用項目中 - 不在庫項目中。

在庫項目中使用AssetsManager時,它使用來自調用項目的文件 - 而不是來自庫項目的assets文件夾。

這是正確的行爲?

下面是根項目的精簡調用活動:

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

而這裏的在庫項目的活動。我認爲資產是從這裏獲取的,而不是從調用活動/項目:

// 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 
       } 
      } 
     } 
    } 

回答

0

找到了答案。資產始終從參考項目中使用。圖書館項目不能持有資產。我發現這個網頁上:

Library Projects

這裏是文檔的一部分,它說明這一點:

的工具不支持使用原始資源文件(保存在 資產/目錄)在一個庫項目中。 應用程序使用的任何資產資源必須存儲在 應用程序項目本身的資產/目錄中。但是,支持res/ 目錄中保存的資源文件。