如何从字符串.xml在android读取值?

我写了这句话:

String Mess = R.string.mess_1 ;

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

408815 次浏览

试试这个

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

仅供以后参考。

字符串资源文档中,它说:

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

在活动:

this.getString(R.string.resource_name)

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

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

解决方案1

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

解决方案2

String mess = getString(R.string.mess_1)

我用这个:

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

**

我希望这个代码是有益的

**

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

顺便说一下,也可以在strings.xml中创建字符串数组,如下所示:

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

然后从你的Activity中你可以得到这样的引用:

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

而你写R。如果你引用的是eclipse创建的R.java类,则使用getResources().getString()并在getString()方法中传递你要读取的资源的id

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

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

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

Context mcontext=getApplicationContext();


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

你可以使用下面的代码:

 getText(R.string.mess_1); 

Basically, you need to pass the resource id as a parameter to the getText() method.

在片段中,您可以使用

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

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

android:text="@string/NameOfTheString"

strings.xml中定义的文本看起来像这样:

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

如果你在一个活动中,你可以使用

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

如果你不在活动中 使用这个:

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

更新

  • 你可以在ActivityFragment中使用getString(R.string.some_string_id)
  • 你可以在不能直接访问getString()方法的地方使用Context.getString(R.string.some_string_id)。像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)
}

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

所以这里有一个独特的解决方案,通过它你可以像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;
}


}

将name字段添加到manifest.xml <application标记中。

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

现在可以开始了。

细节

  • Android Studio 3.1.4
  • Kotlin版本:1.2.60

任务

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

步骤1。应用程序()

获得应用程序上下文的链接

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()

结果

enter image description here enter image description here < / p >

getString(R.string.your_string)获取结果

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

现在你的字符串被复制到myString中。我希望这对你有用。

你可以直接读取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"/>