Android: リソース名を使用して文字列を取得するにはどうすればいいですか? 質問する

Android: リソース名を使用して文字列を取得するにはどうすればいいですか? 質問する

UI に 2 つの言語を用意し、リソース ファイルでそれらの言語に別々の文字列値を設定しますres\values\strings.xml

<string name="tab_Books_en">Books</string>
<string name="tab_Quotes_en">Quotes</string>
<string name="tab_Questions_en">Questions</string>
<string name="tab_Notes_en">Notes</string>
<string name="tab_Bookmarks_en">Bookmarks</string>

<string name="tab_Books_ru">Книги</string>
<string name="tab_Quotes_ru">Цитаты</string>
<string name="tab_Questions_ru">Вопросы</string>
<string name="tab_Notes_ru">Заметки</string>
<string name="tab_Bookmarks_ru">Закладки</string>

ここで、アプリ内でこれらの値を動的に取得する必要があります。

spec.setContent(R.id.tabPage1);
String pack = getPackageName();
String id = "tab_Books_" + Central.lang;
int i = Central.Res.getIdentifier(id, "string", pack);
String str = Central.Res.getString(i);

私の問題はそれですi = 0

私の場合はなぜ機能しないのでしょうか?

ベストアンサー1

あなたが参照しているリンクは、実行時に生成された文字列で機能するようです。strings.xmlの文字列は実行時に作成されません。

String mystring = getResources().getString(R.string.mystring);

getResources()は クラスのメソッドです。または(Context を拡張する)Contextの内部にいる場合は、このスニペットのように使用できます。ActivityService

また、言語依存性全体は Android フレームワークによって処理できることにも注意してください。言語ごとに異なるフォルダを作成するだけです。英語がデフォルト言語の場合は、英語の文字列を に配置しますres/values/strings.xml。次に、新しいフォルダを作成しvalues-ru、同じ名前のロシア語の文字列を に配置します。この時点から、 を呼び出すとき、または を介し​​て XML 内の文字列を参照するときに、res/values-ru/strings.xmlAndroid はデバイスのロケールに応じて正しいものを選択します。 からのものはフォールバックのものであり、ユーザーのロケールをカバーするフォルダがない場合は、これがデフォルト値として使用されます。getString()@string/mystringres/values/strings.xml

見るローカリゼーションそしてリソースの提供詳細については。

おすすめ記事