0

在我的一个图书馆项目中发生了一些神奇的事情。虽然布局(res/layout)是从库项目本身获取的,但资产文件夹中的文件是从调用项目(而不是库项目)获取的。

我目前正在图书馆项目中建立帮助活动。调用项目为库项目中的活动提供文件名。这些文件存储在调用项目中 - 而不是库项目中。

在库项目中使用 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
                }
            }
        }
    }
4

1 回答 1

0

找到了答案。资产总是从引用项目中使用。图书馆项目不能持有资产。我在这个页面上找到了它:

图书馆项目

这是文档中确实描述了这一点的部分:

这些工具不支持在库项目中使用原始资产文件(保存在 assets/ 目录中)。应用程序使用的任何资产资源都必须存储在应用程序项目本身的 assets/ 目录中。但是,支持保存在 res/ 目录中的资源文件。

于 2012-08-30T12:54:23.053 回答