행복한 하루

안드로이드 PreferenceScreen 사용 방법(설정 창) 본문

Android/안드로이드 프로그래밍

안드로이드 PreferenceScreen 사용 방법(설정 창)

변화의 물결 2020. 9. 28. 00:06

안녕하세요.

 

 안드로이드 앱에서 설정하는 화면을 만들려고 하다가 PreferenceScreen을 알게 되었습니다. 그런데 이전 버전 PreferenceScreen deprecated 되었다고 나왔습니다. 그래서 최신 버전에 맞게 변경된 내용으로 작업한 것을 공유해보려고 합니다. 설정 폼하나 띄우는데 이것저것 할 것이 있습니다.

 

1. res/xml resource xml을 생성

 - xml 폴더가 없다면 res 폴더에서 new -> sample Data Directory 해서 생성합니다.

PreferenceScreen 생성

 - Root element PreferenceScreen 인지를 확인하고  파일명을 넣고 OK 합니다.

 

2. 만들어진 xml 파일에 원하는 설정을 UI 코드를 입력

 - SwitchPreferenceCompat, List 넣어서 만들 있습니다.

 - 예제는 스위치 버튼 하나 넣었습니다

<?xml version="1.0" encoding="utf-8"?>
<androidx.preference.PreferenceScreen
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <SwitchPreferenceCompat
        app:key="notifications"
        app:title="Enable alarm message notifications"/>
    <Preference
        app:key="feedback"
        app:title="Send feedback"
        app:summary="Report technical issues or suggest new features"/>
</androidx.preference.PreferenceScreen>

 

3. build.gradle(:app) 라이브러리 추가

 - implementation 마지막에 추가 하고 sync 해줍니다.

 implementation 'androidx.preference:preference:1.1.0'

 

4. fragment 추가하기 위해서 클래스 생성

 - 자신의 package 폴더 (MainActivity 있는 폴더)에서 new -> Java class  만듭니다.

  ( 파일명: PreferenceFragment - 파일명 변경가능)

 - 소스를 입력합니다. R.xml.settingpage 에서 settingpage 이전에 만들었던 PreferenceScreen  xml 파일명을 넣으면 됩니다.

public class PreferenceFragment extends PreferenceFragmentCompat {
    @Override
    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
        setPreferencesFromResource(R.xml.settingpage, rootKey);
    }
}

 

Class 생성

 

5. FrameLayout 생성

 - 설정화면(PreferenceScreen)을 보여줄 화면(Activity)에 FrameLayout을 추가해줍니다. (MainActivity.xml 추가할 수도 있고, 새로운 Activity 만들어서 넣어도 됩니다. 단지, id 잊지 않고 만들어 줍니다.)

...
<FrameLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/frameLayout">

        </FrameLayout>
...

 

6. onCreate에 화면추가

 - 마지막으로 생성된 fragment 사용할 Activity frameLayout 넣어줍니다. 그리기 위해서 fragmentManager() 이용합니다. replace 인자에 앞에서 만든 frameLayout 공간 id 입력합니다. 그리고 PreferenceScreen 클래스 new 해서 생성해줍니다.

 

 - 값이 바뀐 것을 가져올 있는 방법으로 onCreate 같이 만들어줍니다.

PreferenceManager 사용합니다. 그리고 SharedPreferences sp의 sp 변수에 키값을 넣고 값을 읽어옵니다. sp.getBoolean(key, defaultValue)

 

onCreate 추가

 

7. 컴파일 실행

  - 위와 같이 작업이 끝났다면 아래와 같이 나타나고 종료하고도 저장된 값이 나타납니다.

실행화면

 

감사합니다.

 

 

<참고사이트>

https://m.blog.naver.com/edisondl/221468737546

https://blog.codejun.space/62

 

 

Comments