2012-02-23 11 views
11

私のアプリケーションはライブラリプロジェクトによって異なります。ライブラリプロジェクトからのアプリケーションリソースへのアクセス

menu.xmlファイルがアプリケーションプロジェクト内にあります。
すべてのJavaコードは、メニューハンドラコードonOptionsItemSelected()を含むライブラリプロジェクト内にあります。

ライブラリプロジェクトからアプリケーションリソースにアクセスする方法はありますか?

if (item.getItemId()==R.id.settings) { 
... 
} 
+4

ライブラリでアプリケーションプロジェクトの内容を前提にする必要がある場合は、設計を考え直すことをお勧めします。メニューが他のプロジェクトと共有したいものであれば、メニューをライブラリプロジェクトに移動します。 –

+0

私は、ライブラリプロジェクトにはメニューを除いて、すべてのメニューが含まれていることを忘れていました。プロジェクトメニューには、「プロバージョンを取得する」メニュー項目が追加されています。 – tos

+0

ライブラリのアクティビティからサブクラス化し、メニューオプションを "Go Pro"に手動で追加したいと思うかもしれません。 –

答えて

17

はい、あなたはあなたのライブラリーのパッケージ名を知ることができた場合:メニュー項目がライブラリーからは見えないので、私は、現在は不可能である。このような何かを、書きたいと思います。
あなたが行うことができます Resources.getIdentifier(...)

getResources().getIdentifier("res_name", "res_type", "com.library.package");

例:

R.id.settingsは次のようになります。

getResources().getIdentifier("settings", "id", "com.library.package");

+0

それはうまく動作します、ありがとう。 – tos

+0

OK、どうすれば "android:windowBackground"にアクセスできますか? – deadfish

+0

は常に私に "0"を与え、それはそれを見つけることができないことを意味します。 –

12

あなたは本当にただのバージョンを含める必要がありますライブラリプロジェクトのリソース。あなたのアプリケーションに別のmenu.xmlをつけたいのであれば、そうすることができ、それはライブラリプロジェクトからのコピーを無効にします。 Library Projects docsから

リソースIDがアプリケーションとライブラリの両方で定義されているケースでは、ツールはアプリケーションで宣言されたリソースが優先権を取得し、ライブラリプロジェクト内のリソースということを確認してくださいアプリケーション.apkにコンパイルされません。これにより、任意のライブラリで定義されているリソースの動作や値を柔軟に使用または再定義できるようになります。

+0

これはおそらく、この問題に対する最善の解決策であり、必要性を完全に取り除くものです。私はそれを試して、うまく動作します。ありがとうございました。 – tos

+0

[データバインディング](https:/ /)でこの[うまくいきません](https://stackoverflow.com/questions/37213375/is-it-possible-to-redefine-a-librarys-databinding-resource) /developer.android.com/tools/data-binding/guide.html)。 – PLNech

+0

より良い解決策。 – SHM

関連する問題