我想有2种语言的UI和单独的字符串值为他们在我的资源文件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。

为什么它对我没用?


当前回答

为了安全起见,你应该补充: mContext.getResources () .getString (R.string.your_string);

mContext可以是:Fragment的onAttach()中的context或Activity的this。

其他回答

getResources().getString(getResources().getIdentifier("propertyName", "string", getPackageName()))

更简单的方法是在活动中使用getString()函数。

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

参考:http://developer.android.com/guide/topics/resources/string-resource.html

我认为这个功能是在最近的Android版本中添加的,任何了解历史的人都可以对此发表评论。

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

简单的方法

验证您的packageName是否正确。你必须引用你的Android应用程序的根包。

private String getStringResourceByName(String aString) {
      String packageName = getPackageName();
      int resId = getResources().getIdentifier(aString, "string", packageName);
      return getString(resId);
    }

最好的方法

App.getRes () .getString (R.string.some_id)

将工作在任何地方(Utils,模型也)。

我已经看完了所有的答案,所有的答案都可以让你完成工作。

你可以在Activity或Fragment中使用getString(r.r estring .some_string_id)。 你可以使用Context.getString(r.r string.some_string_id),你不能直接访问getString()方法。像对话框。

问题

当你没有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类。

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.r string.some_id)。