안드로이드 개발자의 창고
[50일차 Android] Preferences Screen 본문
출처 : 안드로이드 앱스쿨 2기 윤재성 강사님 수업 PPT
📖 Preferences Screen
- UI를 통해서 Preferences를 사용할 수 있도록 제공되는 개념
- PreferenceFragment를 사용하며 저장 기능까지 모두 구현되어 있다.
- andoridx.preferences를 사용하여 구현한다.
주요 속성(xml / pref.xml)
EditTextPreference
EditTextPreference(문자열 입력) | |
defaultValue | 초기 값 |
title | 화면에 보여지는 이름 |
key | 데이터를 가져올 때 사용하는 이름 |
summary | 표시되는 설명 |
icon | 좌측에 표시될 아이콘 |
dialogIcon | 입력을 위해 뜨는 다이얼로그의 아이콘 |
dialogTitle | 입력을 위해 뜨는 다이얼로그의 타이틀 |
dialogMessage | 입력을 위해 뜨는 다이얼로그의 메시지 |
dependency | true / false를 저장하는 요소의 값에 따라 활성화 / 비활성화가 설정됨 |
CheckBoxPreference
CheckBoxPreference | |
defaultValue |
초기 값 |
key | 데이터를 가져올 때 사용하는 이름 |
title | 화면에 보여지는 이름 |
summary | 표시되는 설명 |
icon | 좌측에 표시될 아이콘 |
summaryOff | 체크 해제 되어 있을 때 보여줄 설명 |
summaryOn | 체크 되어 있을 때 보여줄 설명 |
dependency | true / false를 저장하는 요소의 값에 따라 활성화 / 비활성화가 설정됨 |
SwitchPreference
SwitchPreference | |
defaultValue | 초기 값 |
key | 데이터를 가져올 때 사용하는 이름 |
title | 화면에 보여지는 이름 |
summary | 표시되는 설명 |
icon | 좌측에 표시될 아이콘 |
summaryOff | off 상태 있을 때 보여줄 설명 |
summaryOn | on 상태 있을 때 보여줄 설명 |
dependency | true / false를 저장하는 요소의 값에 따라 활성화 / 비활성화가 설정됨 |
ListPreference
ListPreference | |
defaultValue | 초기 값 |
key | 데이터를 가져올 때 사용하는 이름 |
title | 화면에 보여지는 이름 |
icon | 좌측에 표시될 아이콘 |
summary | 표시되는 설명 |
dialogIcon | 입력을 위해 뜨는 다이얼로그의 아이콘 |
entries | 화면상에 보여줄 항목의 문자열 |
entryValues | 코드에서 사용할 값 |
MultiSelectListPreference
MultiSelectListPreference | |
defaultValue | 초기 값 |
key | 데이터를 가져올 때 사용하는 이름 |
title | 화면에 보여지는 이름 |
icon | 좌측에 표시될 아이콘 |
summary | 표시되는 설명 |
dialogIcon | 입력을 위해 뜨는 다이얼로그의 아이콘 |
entries | 화면상에 보여줄 항목의 문자열 |
entryValues | 코드에서 사용할 값 |
예제 코드
MainActivity.kt
class MainActivity : AppCompatActivity() {
lateinit var activityMainBinding: ActivityMainBinding
// 교체할 프래그먼트 목록
companion object{
val SETTING_FRAGMENT = "SettingFragment"
val RESULT_FRAGMENT = "ResultFragment"
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
activityMainBinding = ActivityMainBinding.inflate(layoutInflater)
setContentView(activityMainBinding.root)
activityMainBinding.run{
button.setOnClickListener {
replaceFragment(SETTING_FRAGMENT, false, false, null)
}
button2.setOnClickListener {
replaceFragment(RESULT_FRAGMENT, false, false, null)
}
}
replaceFragment(SETTING_FRAGMENT, false, false, null)
}
// 지정한 Fragment를 보여주는 메서드
fun replaceFragment(name:String, addToBackStack:Boolean, animate:Boolean, bundle:Bundle?){
// Fragment 교체 상태로 설정한다.
val fragmentTransaction = supportFragmentManager.beginTransaction()
// 새로운 Fragment를 담을 변수
var newFragment = when(name){
SETTING_FRAGMENT -> SettingFragment()
RESULT_FRAGMENT -> ResultFragment()
else -> Fragment()
}
newFragment.arguments = bundle
if(newFragment != null) {
// Fragment 교체
fragmentTransaction.replace(R.id.mainContainer, newFragment)
if (animate == true) {
// 애니메이션 설정
fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
}
if (addToBackStack == true) {
// Fragment를 Backstack에 넣어 이전으로 돌아가는 기능이 동작할 수 있도록 한다.
fragmentTransaction.addToBackStack(name)
}
// 교체 명령
fragmentTransaction.commit()
}
}
// Fragment를 BackStack에서 제거
fun removeFragment(name:String){
supportFragmentManager.popBackStack(name, FragmentManager.POP_BACK_STACK_INCLUSIVE)
}
}
SettingFragment.kt
class SettingFragment : PreferenceFragmentCompat() {
// PreferenceScreen이 생성될 때 호출
// PreferenceScreen을 구성하기 위한 xml 파일 지정
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.pref, rootKey)
}
}
class ResultFragment : Fragment() {
lateinit var fragmentResultBinding: FragmentResultBinding
lateinit var mainActivity: MainActivity
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
fragmentResultBinding = FragmentResultBinding.inflate(inflater)
mainActivity = activity as MainActivity
// Preferences를 가져온다.
val pref = PreferenceManager.getDefaultSharedPreferences(mainActivity)
// 저장된 데이터를 가져온다.
// EditTextPreference
val data1 = pref.getString("data1", null)
// CheckBoxPreference
val data2 = pref.getBoolean("data2", false)
// SwitchPreference
val data3 = pref.getBoolean("data3", false)
// ListPreference
val data4 = pref.getString("data4", null)
// MultiListPreference
val data5 = pref.getStringSet("data5", null)
fragmentResultBinding.run{
textViewResult.text = "data1 : ${data1}\n"
textViewResult.append("data2 : ${data2}\n")
textViewResult.append("data3 : ${data3}\n")
textViewResult.append("data4 : ${data4}\n")
for(a1 in data5!!){
textViewResult.append("data5 : ${a1}\n")
}
}
return fragmentResultBinding.root
}
}
결과
'Computer > Android' 카테고리의 다른 글
[50일차 Android] Image Resource / Image Animation (0) | 2023.07.18 |
---|---|
[50일차 Android] Basic Resource (0) | 2023.07.17 |
[50일차 Android] Preferences (0) | 2023.07.17 |
[50일차 Android] Content Provider (0) | 2023.07.14 |
[44일차 Android] SQLiteDatabase (0) | 2023.07.10 |