1.설명

- 안드로이드 앱에서 환경설정은 필수요소이다

 

- 사용자가 구성 가능한 설정을 애플리케이션에 통합할 때 권장하는 방법은 AndroidX Preference 라이브러리를 사용하는 것이다.

 

-  이 라이브러리는 사용자 인터페이스를 관리하고 스토리지와 상호작용하여 사용자가 구성할 수 있는 개별 설정만 정의다.

 

- 앱의 환경설정을 위해서는 액티비티에서 설정화면을 구성하고, 그 화면에서 발생하는 다양한 사용자 이벤트를 처리하여 설정한 데이터를 영속적으로 저장해야 한다. PreferenceFragment클래스 사용하면 위와 같은 부분을 쉽게 처리 할 수 있다.

 

 

 

 

 

<설명 정리>

(1단계).환경설정 화면 레이아웃 XML을 만든다.

(2단계).PreferenceFragment를 이용하여 환경설정 화면에서 발생하는 이벤트 처리 로직이 들어간다.
(3단계).환경설정 용 액티비티를 하나 만들고 레이아웃을 fragment로 바꾼다.

 

 

 

이제 이거 토대로 코딩 ㄱㄱㄱ

 

 

 

 

 

 

 


 

 

 

 

 

 

(1단계)

2.res->values-> arrays.xml 파일 만들기 (환경설정에서 사용할 문자열 배열 데이터를 저장한다)

3.res 폴더 하위에 xml 폴더를 만든다. -> 해당 폴더에 settings_preference.xml 파일을 만든다. settings_preference.xml 파일은 안드로이드 앱의 환결설정 화면의 레이아웃을 표현한다.

3-1. settings_preference.xml 파일 만든 후, 첫 상태

(루트태그로 PreferenceScreen을 갖는다)

-참고-

PreferenceScreen태그에 사용되는 태그

3-2. settings_preference.xml에 코드 입력

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <PreferenceCategory android:title="메시지 알림">
        <SwitchPreference
            android:key="message"
            android:title="메시지 알림"/>

        <PreferenceScreen
            android:key="keyword_screen"
            android:title="키워드 알림"
            android:summary="사용안함">
            <SwitchPreference
                android:defaultValue="false"
                android:key="keyword"
                android:summary="등록된 키워드가 포함된 메시지는 채팅방 알림이 꺼져 있어도 푸시 알림을 받게 되어 키워드는 강조되어 보여 집니다."
                android:title="키워드 알림"/>
            <ListPreference
                android:entries="@array/array_voice"
                android:entryValues="@array/array_voice"
                android:key="keyword_sound_list"
                android:summary="카톡"
                android:title="키워드 전용 알림음"
                android:dependency="keyword"/>
        </PreferenceScreen>

        <SwitchPreference
            android:key="sound"
            android:title="소리"/>

        <ListPreference
            android:entries="@array/array_voice"
            android:entryValues="@array/array_voice"
            android:key="sound_list"
            android:summary="카톡"
            android:title="알림음음"/>
    </PreferenceCategory>
</PreferenceScreen>

설명->

ListPreference를 보면 entries와 entryValues 속성값이 존재한다.

이 속성값은 배열 리소스로 등록해야 하기 때문에, 앞서 arrays.xml 파일을 만든 것이다.

 

3-3. settings_preference.xml 화면구성

 

 

 

 

 

 

 


 

 

 

 

 

 

(2단계)

4.환경설정 처리 로직 (java코드)

- PreferenceFragment를 extends 한다.

- SettingPreferenceFragment.java는 앞서 만든 settings_preference.xml와 연결되어 만들어둔 환경설정 화면과 그 이벤트 처리등을 담당하게 된다. 

- onCreate부분에서는 이미 저장된 환경설정 내용을 가져와, 그 내용들을 환경설정의 summary부분에 셋팅해준다.

- 그리고 prefs.registerOnSharedPreferenceChangeListener(prefListener); 로 연결된 리스너 SharedPreferences.OnSharedPreferenceChangeListener()를 통해서 사용자가 환경설정 하는 순간의 이벤트 처리를 한다.

 

 

 

 

 


 

 

 

 

 

 

(3단계)

 

5.이번 3단계에서는 이미 만들어진 환경설정 내용을 화면에 보여주기위해 액티비티에 연결하는 부분이다. 간단하므로 SettingActivity 액티비티와 그 레이아웃 activity_setting.xml의 소스로 설명을 대신한다. 

-SettingActivity.java-

-activity_setting.xml-

설명->

activity_setting.xml는 일반적인 액티비티의 레이아웃이 아니라 fragment라는 태그를 사용한다. 

 

 

 

 

 

 


 

 

 

 

 

 

-결과-

 

 

 

 

 

자동으로 설정된 값들을 영속적으로 저장하고 있기때문에, 앱을 종료후 다시 접속해도 그 환경설정 데이터가 지워지지 않고 유지된다.