안녕하세요 골드입니다.
오늘은 어플리케이션에서 설정 창을 구현하는 방법에 대해서 글을 쓰도록 하겠습니다.
안드로이드는 어플리케이션에 사용자 설정 화면을 만들 수 있도록 XML기반 라이브러리를 제공하고 있습니다.
이 라이브러리를 사용하면 일관성 있는 사용자 UI를 생성할 수 있습니다.
여기에는 분명한 장점이 있습니다.
사용자는 익숙한 설정 화면의 레이아웃과 사용법에 익숙해지게 됩니다.
그리고 다른 어플리케이션의 설정을 우리 어플리케이션에 통합할 수 있게 됩니다.
Preference 라이브러리는 두 가지 요소로 구성됩니다.
- 프레퍼런스 화면 레이아웃 : 화면에 보여줄 공유 프레퍼런스 키를 지정하는 XML 파일.
- 프레퍼런스 프래그먼트 : XML파일을 인플레이트하는 PreferenceFragment나 PreferenceFragmentCompat
* 안드로이드 10부터 android.preference가 아닌 AndroidX Preference 라이브러리가 지원됩니다.
1. 라이브러리 추가하기
어플리케이션 모듈(app) build.gradle 파일을 열고 dependencies 안에 라이브러리를 추가합니다.
2. XML로 프레퍼런스 화면 레이아웃 정의하기
루트 태그가 preferenceScreen 태그인 xml파일은 res/xml 안에 정의되어야 합니다.
res 폴더 안에 New -> Directory 이름이 xml인 폴더를 새로 만듭니다.
xml 폴더 안에 새로운 xml resources 파일을 생성합니다.
이름은 마음대로 저장합니다.
xml파일에 태그를 추가합니다.
이름은 userpreferences라고 짓겠습니다.
프레퍼런스 요소에 사용되는 속성들 중 몇 가지 주요 속성은 다음과 같습니다.
- key : 선택된 값이 저장될 공유 프레퍼런스의 키
- title : 프레퍼런스를 나타내기 위해 보여주는 제목
- summary : 제목 아래 작은 텍스트로 보여주는 설명
- defaultValue : 기본값
xml을 위한 Fragment 클래스를 하나 생성합니다.
PreferenceFragmentCompat을 상속받습니다.
PreferenceFragmentCompat 클래스는 어떤 액티비티에도 지원 라이브러리의 프레퍼런스 프래그먼트를 추가할 수 있습니다.
setPreferencesFromResource에서 userpreferences.xml을 인플레이트합니다.
3. MainActivity에서 Intent로 프레퍼런스 액티비티 열기
먼저 MainActivity에 OptionsMenu 메서드를 오버라이드 하겠습니다.
적절한 요청코드를 위한 변수 선언입니다.
option menu를 만들기 위해 onCreateOptionsMenu를 오버라이드 했습니다.
간단하게 Settings라는 메뉴를 추가했고,
menu item 클릭을 위해 onOptionsItemSelected를 오버라이드 했습니다.
Settings의 아이디를 선언하지 않았기 때문에 기본값 0으로 case문을 작성하였습니다.
PreferencesActivity로 Intent를 전달합니다.
PreferencesActivity.class를 아직 추가하지 않았기 때문에 빨갛게 에러가 날 것입니다.
4. Preferences UI를 위한 액티비티와 프레그먼트 추가
먼저 에러를 없애기 위해 PreferencesActivity를 생성합니다.
class를 생성하고 UI를 위해 xml도 같이 만들어줍니다.
PreferencesActivity를 위한 xml은 res/layout에 생성합니다.
매일 보던 MainActivity와 다른 것이 없습니다.
간단하게 AppCompatActivity를 상속받고 onCreate 메서드를 오버라이드합니다.
setContentView에 인수로는 R.layout.preferences가 들어갑니다.
앞에서 참조한 preferences.xml 파일입니다.
fragment 태그 하나만 넣었습니다.
android:name 속성에 우리가 아까 만든 MySettingsFragment를 참조합니다.
마지막으로 Manifest.xml에 우리가 생성한 PreferencesActivity를 참조하도록 설정하면 됩니다.
복잡해보이지만 요약하면
MainActivity에 Option menu를 추가했습니다. 여기서 Settings item을 클릭하면,
PreferencesActivity에 Intent를 보내게 되는데,
PreferencesActivity가 참조하고 있는 xml 파일에 fragment 태그에서
MySettingsFregment 클래스가 참조한 userpreferences가 나타나게 됩니다.
MainActivity menu item -> PreferencesActivity[fragment<MySettingsFragment(userpreferences.xml)>]
기호는 제가 임의로 작성한 것입니다.
크게 보면 두 개의 액티비티인데
PreferencesActivity 안에 Fragment가 하나 있는 구조입니다.
그럼 실행해보겠습니다.
Settings를 클릭하면
Preference UI가 나타나게 됩니다.
설정값에 따른 변화는 SharedPreferences 리스너를 등록하면 됩니다.
추후에 추가적으로 작성하도록 하겠습니다.
여기까지 골드였습니다.
감사합니다.
참고자료 : Professional Android
'Mobile > Android(Java)' 카테고리의 다른 글
[Android/java] SwipeRefreshLayout을 이용하여 당겨서 리스트 새로고침구현하기 (0) | 2020.04.12 |
---|---|
[Android/java] Fragment 동적 생성, 제거, 교체 애니메이션 (0) | 2020.03.29 |
[Android/java] Camera 사용하기 (동적으로 ImageView 만들어서 Layout에 삽입하기) (0) | 2020.03.23 |
[Android/java] AlertDialog.Builder를 통한 Custom Dialog 만들기 (0) | 2020.03.14 |
[Android/java] RecyclerView를 활용하여 ListView 만들기 (0) | 2020.03.06 |