私は、私のリソースファイルres\values\strings.xml
で、UIと2つの別々の文字列値のために2つの言語を持ちたいです。
<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
です。
なぜ私の場合はうまくいかないのですか?
参照しているリンクは、実行時に生成された文字列で機能するようです。 strings.xmlの文字列は実行時には作成されません。あなたはそれらを得ることができます
String mystring = getResources().getString(R.string.mystring);
getResources()
はContext
クラスのメソッドです。あなたがActivity
またはService
(Contextを拡張する)の内側にいる場合は、このスニペットのように使用できます。
また Androidのフレームワークによって言語の依存関係全体を処理できることに注意してください 。言語ごとに異なるフォルダを作成するだけです。英語がデフォルトの言語の場合は、英語の文字列をres/values/strings.xml
に入れるだけです。次に、新しいフォルダvalues-ru
を作成し、ロシア語の文字列を同じ名前でres/values-ru/strings.xml
に入れます。これ以降、Androidでは、getString()
を呼び出すとき、または@string/mystring
を介してXMLで文字列を参照するときのどちらかに、デバイスロケールに応じて正しいものを選択します。 res/values/strings.xml
からのものは代替のものです、あなたがユーザロケールをカバーするフォルダを持っていないならば、これはデフォルト値として使われるでしょう。
詳細については、 ローカライゼーション および リソースの提供 を参照してください。
私は同じ問題を抱えています。しかし、以下のこのコードは私のために働きます:あなたのpackageNameが正しいかどうか確かめてください。あなたはあなたのAndroidアプリケーションのルートパッケージを参照する必要があります。
private String getStringResourceByName(String aString) {
String packageName = getPackageName();
int resId = getResources().getIdentifier(aString, "string", packageName);
return getString(resId);
}
活動だけからではない:
public static String byIdName(Context context, String name) {
Resources res = context.getResources();
return res.getString(res.getIdentifier(name, "string", context.getPackageName()));
}
getResources().getString(getResources().getIdentifier("propertyName", "string", getPackageName()))
Leonvianの解に何かを追加したいので、もし偶然に文字列がリソースの中に見つからなかったら(戻り値0、それは有効なリソースコードではない)、関数は何かを返すかもしれません:
private String getStringResourceByName(String aString) {
String packageName = getPackageName();
int resId = getResources()
.getIdentifier(aString, "string", packageName);
if (resId == 0) {
return aString;
} else {
return getString(resId);
}
}
もっと簡単な方法はアクティビティ内でgetString()
関数を使うことです。
String myString = getString(R.string.mystring);
参照: http://developer.Android.com/guide/topics/resources/string-resource.html
私はこの機能が最近のAndroidバージョンに追加されていると思います。歴史を知っている人なら誰でもこれにコメントすることができます。
文字列からTextViewにリソース文字列を取得する簡単な方法。ここでresourceNameはリソースの名前です
int resID = getResources().getIdentifier(resourceName, "string", getPackageName());
textview.setText(resID);
アクティビティ参照がない場合は、このようにコンテキストを使用できます。
getContext().getString(R.string.your_string_name);
App.getRes().getString(R.string.some_id)
私はすべての答えを読みました、すべての答えはあなたの仕事を終わらせることができます。
getString(R.string.some_string_id)
はActivity
またはFragment
の両方で使用できます。Context.getString(R.string.some_string_id)
メソッドに直接アクセスできない場合は、getString()
を使用できます。 Dialog
のように。Context
クラスのメソッドのように、Util
アクセスがない場合 .
コンテキストなしで以下のメソッドを仮定します。
public void someMethod(){
...
// can't use getResource() or getString() without Context.
}
このメソッドではContext
をパラメータとして渡してgetString().
を使います。
public void someMethod(Context context){
...
context.getString(R.string.some_id);
}
私がしているのは
public void someMethod(){
...
App.getAppResources().getString(R.string.some_id)
}
何?あなたのアプリのどこにでも使うのはとても簡単です!
だからここに ソリューション Util class
のようなどこからでもリソースにアクセスすることができます/ /です。
import Android.app.Application;
import Android.content.res.Resources;
public class App extends Application {
private static Resources resources;
@Override
public void onCreate() {
super.onCreate();
resources = getResources();
}
public static Resources getAppResources() {
return resources;
}
}
manifest.xml
<application
タグにnameフィールドを追加してください。
<application
Android:name=".App"
...
>
...
</application>
今、あなたは行ってもいいです。アプリ内の任意の場所でApp.getAppResources().getString(R.string.some_id)
を使用してください。
一連の 定義済みのAndroid文字列 "Ok"、 "Cancel"、その他多数 - を宣言している必要はない。それらは単に利用可能です:
getString(Android.R.string.ok)
(この場合、 "Ok"という文字列)ところで、例えばアイコン画像などのような利用可能な他のAndroidリソースもあります。
String myString = getString(R.string.mystring);
簡単な方法
アクティビティでこれを試すことができます:
getResources().getString(R.string.your string name);
フラグメントなどの他の状況では...
getContext().getResources().getString(R.string.your string name);
念のため、mContext.getResources()。getString(R.string.your_string);を追加してください。
mContextは、FragmentのonAttach()のコンテキスト、またはActivityのthisになります。