development

Android 환경 설정 키를 저장할 위치

big-blog 2020. 12. 30. 20:16
반응형

Android 환경 설정 키를 저장할 위치


기본 설정 활동을 만들 때 모든 기본 설정을 xml 파일에 정의합니다. 모든 환경 설정에는이 xml에 정의 된 키가 있습니다. 그러나 환경 설정에 액세스하면 다음과 같이 작성합니다.

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

하드 코딩 된 방식으로 "foo_key_defined_in_xml"참조를 피할 수있는 방법이 있습니까? R 스타일로 참조 할 가능성이있을 수 있습니다 (문자열을 참조하지 않음)?


키를 strings.xml 에 저장 하고 다른 모든 값과 마찬가지로 preferences.xml 에서 참조 할 수 있음을 발견했습니다 android:key="@string/preference_enable".

코드에서 입력하여 키를 참조 할 수 있습니다. getString(R.string.preference_enable)

<xliff:g>태그를 사용하여 번역되지 않도록 문자열을 표시 할 수 있습니다 . 현지화 체크리스트 보기

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

"res / values"에 "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));

시도해보십시오 getString(R.string.key_defined_in_xml).


내가 아는 한 기본 설정 키를 참조하는 더 좋은 방법은 없습니다 (정적 최종 문자열을 사용하여 클래스에 문자열을 저장하는 것 제외).

SDK 문서에 제공된 예제예제에서 제공 한 것과 동일합니다.


헬퍼 클래스를 사용하여 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);
    }
}

strings.xml에서 키를 번역 할 수 없음으로 표시합니다.

<string name="screw_spacing_key" translatable="false">Screw spacing</string>
<string name="screw_spacing_title">Screw spacing</string>
<string name="screw_spacing_summary">Set screw spacing</string>

용법:

<EditTextPreference
    android:key="@string/screw_spacing_key"
    android:title="@string/screw_spacing_title"
    android:summary="@string/screw_spacing_summary"/>

참조 : 번역 할 수없는 행 구성

ReferenceURL : https://stackoverflow.com/questions/2857121/where-to-store-android-preference-keys

반응형