2010-05-18 5 views
43

환경 설정 활동을 만들 때 xml 파일의 모든 환경 설정을 정의합니다. 모든 환경 설정에는이 XML에서 정의 된 키가 있습니다. 나는 기본 설정에 액세스 할 때 나는 쓰기 :Android 설정 키를 저장할 위치는 어디입니까?

SharedPreferences appPreferences = PreferenceManager.getDefaultSharedPreferences(this); 
boolean foo_value = appPreferences.getBoolean("foo_key_defined_in_xml", false); 

하드 코딩 방법으로 "foo_key_defined_in_xml"를 참조 피하기 위해 어떤 방법이 있나요? 아마도 R 스타일 방식으로 문자열을 참조하지 않을 가능성이 있습니까?

답변

59

나는 strings.xml의에 키를 저장하고 단지 다른 모든 값 android:key="@string/preference_enable"처럼 preferences.xml로에서 그들을 참조 할 가능성이 있음을 발견했습니다.

코드에서 당신은 당신은 문자열이 <xliff:g> 태그를 사용하여 번역하지 않도록 표시 할 수 있습니다 getString(R.string.preference_enable)

을 입력하여 키를 참조 할 수 있습니다. 각 활동 또는 서비스에 한 번 도우미를 인스턴스화 -

<string name="preference_enable"><xliff:g id="preference_key">enable</xliff:g></string> 
+1

키를 한 곳에서 변경할 수 있고 설정 페이지와 코드에서 참조하는 곳으로 키를 전파 할 수 있기 때문에 가장 좋은 방법입니다. –

+5

여러 언어 xml 파일을 지원할 때 키 문자열이 부주의하게 번역 될 수 있으므로이 문제에 대해 조언 할 것입니다. –

+16

글쎄, 당신은 정적 값과 번역만을 포함하는 다른 파일에 그 열쇠를 저장해야합니다. – Hameno

0

필자가 아는 한, 환경 설정 키를 참조하는 더 좋은 방법은 없다 (클래스에 문자열을 저장하기 위해 정적 최종 문자열을 사용하는 것 외에는). SDK를 워드 프로세서에 주어진 example

+0

이것은 내가 어떻게하는지를 보여줍니다. 이 방법으로 새 ​​키를 만들 때 생성 한 동일한 파일에서 참조 할 필요가있는 모든 클래스에서 즉시 사용할 수있는 public static final String 참조가 만들어집니다. –

1

getString(R.string.key_defined_in_xml)을 시도, 당신이 당신의 예에 준 것과 같은 않습니다.

+0

작동하지 않습니다. 'android : key'의 값은이 클래스에 저장되지 않습니다. – scai

1

Localization Checklist가에는 getString을 숨기기 위해 헬퍼 클래스를 사용하는 방법에 대한() 무엇을 참조하십시오.

class Pref { 

    final String smsEnable_pref; 
    final String interval_pref; 
    final String sendTo_pref; 
    final String customTemplate_pref; 
    final String webUrl_pref; 

    Pref(Resources res) {  
     smsEnable_pref = res.getString(R.string.smsEnable_pref); 
     interval_pref = res.getString(R.string.interval_pref); 
     sendTo_pref = res.getString(R.string.sendTo_pref); 
     customTemplate_pref = res.getString(R.string.customTemplate_pref); 
     webUrl_pref = res.getString(R.string.webUrl_pref); 
    } 
} 
+0

나는 ddcruver의 의미를 잘 모르겠습니다. by __ 비록 당신이 /res/values/string.xml에 resoure를 정의하여이 키 이름을 유지한다면 android : key = "key_name"에서 사용할 수 없습니다 .____ Pixel이 쓴 것처럼, android : key = "@ 문자열/환경 설정 _ 키 ". 어쩌면 내가 뭔가를 놓친 것 같아. –

7

당신은 "고해상도/값"에서 "keys.xml"파일을 사용할 수 있지만, 다음과 같은 여러 언어를 사용하는 경우이 문제가 해달라고한다 이런 식으로 뭔가를 넣어해야합니다 :

를 예를 들어
<resources 
    xmlns:tools="http://schemas.android.com/tools" 
    tools:ignore="MissingTranslation"> 

    <string name="key1">key1</string> 
    <string name="key2">key2</string> 
... 
</resources> 

그럼 당신은 XML에서 일반 문자열처럼 참조 할 수 있습니다 :

.... 
android:key="@string/key1" 
.... 

또는 예를 들어 당신의 자바 코드 :

SwitchPreference Pref1= (SwitchPreference) getPreferenceScreen().findPreference(getString(R.string.key1)); 
+2

나는 청소기이기 때문에 받아 들인 대답보다 더 좋아한다. (실제로 그 대답에 대한 코멘트에서 제안된다.) 아아, "string /"네임 스페이스는 여전히 실제 문자열과 환경 설정 키 모두로 오염되어 있습니다. 접두사를 사용하여 다소 멋지게 해결해야합니다. –