android에서 string.xml에서 값을 읽는 방법은 무엇입니까?


368

나는 줄을 썼다 :

String Mess = R.string.mess_1 ;

문자열 값을 얻으려면 문자열을 반환하는 대신 정수 유형의 ID를 제공합니다. 문자열 값을 어떻게 얻을 수 있습니까? string.xml파일 에서 문자열 값을 언급했습니다 .

답변:


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

나는 이것을 사용했다 : String message + = getResources (). getString (R.string.string1) + "더 많은 단어 ..."; 이 문자열을 SMS를 통해 보내려고했지만 작동하지 않습니다. 문자열 리소스가 없으면 제대로 작동합니다. 뭔가 빠졌습니까?
keybee

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
경고- 안드로이드 문서를 인용 하는 이 답변에 따르면를 사용 Resources.getSystem()하면 응용 프로그램 리소스가 아니라 안드로이드 만 제공합니다. 같은 리소스에 사용해서는 안됩니다 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

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

세부

  • 안드로이드 스튜디오 3.1.4
  • 코 틀린 버전 : 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()

결과

여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오


1

당신이 쓰는 동안 R. 당신은 R.java일식에 의해 생성 된 클래스를 참조하고 , 메소드 내부에서 읽으려고하는 리소스를 사용 getResources().getString()하고 전달합니다 .idgetString()

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


0

**

이 코드가 도움이 되길 바랍니다.

**

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

0

최신 정보

  • 또는 getString(R.string.some_string_id)모두에 사용할 수 있습니다 .ActivityFragment
  • 메소드에 Context.getString(R.string.some_string_id)직접 액세스 할 수없는 곳에서 사용할 수 있습니다 getString(). 처럼 Dialog.

문제 는 클래스 의 메소드와 같이 액세스 권한 이없는ContextUtil입니다.

컨텍스트없이 아래의 메소드를 가정하십시오.

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;
    }

}

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"/>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.