Android Import ressources from Library Project
-
12-10-2019 - |
質問
アプリケーションプロジェクトのライブラリプロジェクトで定義されている文字列のようなRessourcesを使用することは可能ですか?もしそうなら、どうですか?私は文字列を解決できないように見えるので、私はこのように解決したいと思います:
String title = "sample";
int id = ressources.getIdentifier(title, "string", "com.package");
この例外を与えてくれます
Warn/ResourceType(278):リソース番号の値を取得するときにパッケージ識別子なし0x0000000000WAN/SYSTEM.ERR(278):Android.Content.Resources $ notFoundException:String Resource ID#0x0
私が探している文字列( "Sample")は、ライブラリプロジェクトの文字列ins.xmlで提供されるこのパッケージに間違いなく含まれています。 R.Javaでも見ることができます
解決
だからそうです
int id = ressources.getidentifier(title、 "string"、 "com.package");
戻ってきています 0
, 、つまり、指定されたリソースが見つかりません。後続の呼び出し ressources.getIdentifer()
それ以来、例外を引き起こします 0
有効なリソースIDではありません。
デバッグ/代替アイデアを次に示します。
おそらくこれはおそらくこれを何十回も行っていますが、言及を害することはありません。
- パッケージスペルは正しい(ライブラリプロジェクトとクライアントプロジェクトの両方)、
- リソース文字列は正しい(ライブラリプロジェクトとクライアントプロジェクト)、
- ライブラリのスペルは正しいです
uses-library
要素AndroidManifest.xml
, - 等
- そのライブラリのリソースにアクセスできますか、またはそのリソースに固有の問題です(
title
)または、それはそのタイプのリソース(文字列)に固有のものですか?別のライブラリのリソースにアクセスできますか?
- ジャーファイルとしてライブラリにアクセスしていますか?コードを瓶に入れることはできますが、瓶からリソースにアクセスすることはできません。
Android-いくつかのアプリケーションで使用するカスタムライブラリを作成することは可能ですか?
- 代替名形式を試しましたか:
コード
String fullyQualifiedResourceName = "com.package:string/sample";
int id = ressources.getIdentifier(title, null, null);
if (id == 0) {
Log.e(TAG, "Lookup id for resource '"+fullyQualifiedResourceName+"' failed";
// graceful error handling code here
}
- リフレクションを使用してみることができます。
コード
final String resourceName= "sample";
final int id;
try {
final Class resourceType = com.package.R.string.class;
final Field field = resourceType.getField(title);
id = field.getInt(null);
} catch (final Exception e) {
Log.e(TAG, "Lookup id for resource '"+resourceName+"' failed";
// graceful error handling code here
}
http://daniel-codes.blogspot.com/2009/12/dynamically-retrieving-resources-in.html
他のヒント
プロジェクトコードでは、Rクラスをインポートします。
import com.application.libraryproject.R
次に、このような文字列または他のXML定義のリソースを参照できます。
String mystring = getString(R.string.app_name);
または類似。
私は同様の問題を抱えていました、そして私はそれを解決しました getPackageName()
プロジェクトライブラリ内の方法。
あなたの場合、それは次のとおりです。
String title = "sample";
int id = ressources.getIdentifier(title, "string", getPackageName());
はい、ライブラリプロジェクトのリソースを通常のように定義します。次に、ライブラリのAndroidManifest.xmlにパッケージ名でRクラスを準備して、ライブラリをインポートするプロジェクトでそれらを参照します。