如何从android中的string.xml读取值?


368

我写了这样的话:

String Mess = R.string.mess_1 ;

获取字符串值,但不是返回字符串,而是给我id类型的整数。如何获取其字符串值?我在string.xml文件中提到了字符串值。

Answers:


807

尝试这个

String mess = getResources().getString(R.string.mess_1);

更新

String string = getString(R.string.hello);

您可以使用getString(int)getText(int)来检索字符串。getText(int)将保留应用于该字符串的任何富文本样式。

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


87
您可以简化this.getString(R.string.some_id)Context(活动或服务)。
Matthias 2010年

我用了这个:字符串消息+ = getResources()。getString(R.string.string1)+“更多单词...”; 而且我想通过短信发送此字符串,但无法正常工作。没有字符串资源,它可以正常工作。我想念什么吗?
keybee 2013年

9
您可以将其简化为getString(R.string.some_id)。而且,如果您要自定义字符串,则可以使字符串类似“ Welcome,%1 $ s”,然后可以使用getString(R.string.some_id,“ John Doe”)。在运行时获取“ Welcome,John Doe”。
M Granja

也适用于其他类型(例如我刚刚使用过的)getResouces().getInteger(R.integer.my_value_in_xml)
Noah Herron

61

活动中:

this.getString(R.string.resource_name)

如果不在活动中但可以访问上下文:

context.getString(R.string.resource_name)
application.getString(R.string.resource_name)

3
您无需this在活动中包括。只是getString()会让您做事。
CopsOnRoad

43

我正在使用这个:

String URL = Resources.getSystem().getString(R.string.mess_1);

10
警告-根据此答案引用android的文档,使用Resources.getSystem()不会给您应用程序资源,而只会给您android的资源。不应将其用于诸如之类的资源string。我使用了此解决方案,并且应用程序崩溃了,并抛出了一个notfoundexception难以理解的错误消息(因为该资源存在于中strings.xml)。
et_l

也尝试过-不起作用。太令人
难以置信

23

顺便说一句,也可以像这样在strings.xml中创建字符串数组:

<string-array name="tabs_names"> 
    <item>My Tab 1</item> 
    <item>My Tab 2</item>
</string-array>

然后从“活动”中获取像这样的参考:

String[] tab_names = getResources().getStringArray(R.array.tab_names);
String tabname1=tab_names[0];//"My Tab 1"

这个答案应该在那里。在大多数情况下,您是从XML中读取数组而不是单个字符串。
Ojonugwa Jude Ochalifu 2015年

11

仅供以后参考。

字符串资源文档中说:

您可以使用getString(int)或getText(int)检索字符串。getText(int)将保留应用于该字符串的任何富文本样式。


6

解决方案1

Context context;
String mess = context.getString(R.string.mess_1)

解决方案2

String mess = getString(R.string.mess_1)

3

在片段中,您可以使用

getActivity().getString(R.id.whatever);

3

例如,如果要将字符串值添加到按钮,则使用简单

android:text="@string/NameOfTheString"

strings.xml中定义的文本如下所示:

 <string name="NameOfTheString">Test string</string>

2

getResources()在Android中使用之前,您必须引用上下文名称。

String user=getApplicationContext().getResources().getString(R.string.muser);

要么

Context mcontext=getApplicationContext();

String user=mcontext.getResources().getString(R.string.muser);

1

您可以使用以下代码:

 getText(R.string.mess_1); 

基本上,您需要将资源ID作为参数传递给getText()方法。


1

如果您正在参加活动,则可以使用

getResources().getString(R.string.whatever_string_youWant);

如果您不在活动中,请使用以下命令:

getApplicationContext.getResource().getString(R.String.Whatever_String_you_want)

1

细节

  • Android Studio 3.1.4
  • Kotlin版本:1.2.60

任务

  • 单行使用
  • 最小码
  • 使用编译器的建议

步骤1. Application()

获取链接到您的应用程序的上下文

class MY_APPLICATION_NAME: Application() {

    companion object {
        private lateinit var instance: MY_APPLICATION_NAME

        fun getAppContext(): Context = instance.applicationContext
    }

    override fun onCreate() {
        instance = this
        super.onCreate()
    }

}

步骤2.添加int扩展名

inline fun Int.toLocalizedString(): String = MY_APPLICATION_NAME.getAppContext().resources.getString(this)

用法

strings.xml

<resources>
    <!-- .......  -->
    <string name="no_internet_connection">No internet connection</string>
    <!-- .......  -->
</resources>

获取字符串值:

val errorMessage = R.string.no_internet_connection.toLocalizedString()

结果

在此处输入图片说明 在此处输入图片说明


1

当你写的时候R。您指的R.java是eclipse创建的类,请使用您要尝试从中读取的资源getResources().getString()并将其传递idgetString()方法。

范例: String[] yourStringArray = getResources().getStringArray(R.array.Your_array);



0

更新资料

  • 您可以使用getString(R.string.some_string_id)两种ActivityFragment
  • 您可以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.getRes().getString(R.string.some_id)
}

什么?在您的应用程序中的任何地方使用非常简单!

因此,这里有一个独特Bonus奖励解决方案,您可以通过它从任何地方访问资源Util class

import android.app.Application;
import android.content.res.Resources;

public class App extends Application {
    private static App mInstance;
    private static Resources res;


    @Override
    public void onCreate() {
        super.onCreate();
        mInstance = this;
        res = getResources();
    }

    public static App getInstance() {
        return mInstance;
    }

    public static Resources getResourses() {
        return res;
    }

}

将名称字段添加到manifest.xml <application标签。

<application
        android:name=".App"
        ...
        >
        ...
    </application>

现在你很好。



0

String myString = getResources().getString(R.string.here_your_string_name);

现在,您的字符串已复制到myString中。希望它对您有用。


0

您可以直接读取在strings.xml中定义的值:

<resources>
    <string name="hello">Hello StackOverflow!</string>
</resources>

并设置为变量:

String mymessage = getString(R.string.hello);

但是我们可以在视图中定义字符串:

<TextView
    android:id="@+id/myTextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello"/>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.