안드로이드 : 이름을 사용하여 리소스에서 문자열을 얻는 방법은 무엇입니까?
UI에 2 가지 언어를 사용하고 리소스 파일에 별도의 문자열 값을 지정하고 싶습니다 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
.
내 경우에는 왜 작동하지 않습니까?
언급 한 링크는 런타임에 생성 된 문자열로 작동하는 것 같습니다. strings.xml의 문자열은 런타임에 작성되지 않습니다. 당신은 그들을 통해 얻을 수 있습니다
String mystring = getResources().getString(R.string.mystring);
getResources()
Context
클래스 의 방법입니다 . ( Activity
또는 Service
컨텍스트를 확장 하는) 내부에있는 경우이 코드 조각과 같이 사용할 수 있습니다.
또한 전체 언어 종속성은 android 프레임 워크에서 처리 할 수 있습니다 . 각 언어마다 다른 폴더를 만들면됩니다. 영어가 기본 언어 인 경우 영어 문자열을에 넣으십시오 res/values/strings.xml
. 그런 다음 새 폴더를 만들고 values-ru
이름이 같은 러시아어 문자열을에 넣습니다 res/values-ru/strings.xml
. 이 시점에서 안드로이드는 전화를 걸 getString()
거나 XML을 통해 문자열을 참조 할 때 장치 로캘에 따라 올바른 것을 선택합니다 @string/mystring
. 에서 사람들은 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);
최고의 접근법
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
태그에 이름 필드를 추가하십시오 .
<application
android:name=".App"
...
>
...
</application>
이제 잘 가세요. App.getAppResources().getString(R.string.some_id)
앱 어디에서나 사용하십시오 .
활동 참조가없는 경우 다음과 같은 방식으로 컨텍스트를 사용할 수 있습니다.
getContext().getString(R.string.your_string_name);
"Ok", "Cancel"등과 같은 미리 정의 된 Android 문자열 세트도 있으므로 모두 선언 할 필요가 없습니다. 다음과 같이 간단하게 사용할 수 있습니다.
getString(android.R.string.ok)
(이 경우 "Ok"문자열). BTW에는 아이콘 이미지 등과 같은 다른 Android 리소스도 있습니다.
문자열 myString = getString (R.string.mystring);
쉬운 방법
안전을 위해 다음을 추가해야합니다. mContext.getResources (). getString (R.string.your_string);
mContext는 Fragment의 onAttach () 또는 Activity의 context 일 수 있습니다.
당신은 활동에서 이것을 시도 할 수 있습니다 :
getResources().getString(R.string.your string name);
조각과 같은 다른 상황에서는 ... 사용
getContext().getResources().getString(R.string.your string name);
'development' 카테고리의 다른 글
문자열에서 각 단어의 첫 글자를 대문자로 바꾸는 방법 (Python)? (0) | 2020.02.11 |
---|---|
Android에서 URL로 ImageView를로드하는 방법은 무엇입니까? (0) | 2020.02.11 |
힘내와 머큐리얼-비교 및 대조 (0) | 2020.02.11 |
생성자 서명을 정의하는 인터페이스? (0) | 2020.02.11 |
__pycache__는 무엇입니까? (0) | 2020.02.10 |