android Settings Activity 구현. kotlin
아래와 같이 액티비티를 추가한다.
Android Studio
File - New - Activity - Settings Activity
res - xml 에 root_preferences.xml 와 비슷한 파일명을 열어 아래와 같이 수정한다.
Activity
<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory app:title="@string/messages_header">
<EditTextPreference
app:key="test1"
app:title="@string/signature_title"
app:useSimpleSummaryProvider="true" />
<SeekBarPreference
app:key="test2"
app:title="font sizw"
app:iconSpaceReserved="false"
app:showSeekBarValue="true"
app:defaultValue="15"
app:min="10"
android:max="35"/>
<ListPreference
app:defaultValue="reply"
app:entries="@array/reply_entries"
app:entryValues="@array/reply_values"
app:key="reply"
app:title="@string/reply_title"
app:useSimpleSummaryProvider="true" />
</PreferenceCategory>
</PreferenceScreen>
res - values - arrays.xml 에는 ListPreference의 값이 들어간다.
<resources>
<!-- Reply Preference -->
<string-array name="reply_entries">
<item>Reply</item>
<item>Reply to all</item>
</string-array>
<string-array name="reply_values">
<item>reply</item>
<item>reply_all</item>
</string-array>
</resources>
Activity 코드.
class SettingsActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.settings_activity)
supportFragmentManager
.beginTransaction()
.replace(R.id.settings, SettingsFragment(preferenceChangeListener))
.commit()
supportActionBar?.setDisplayHomeAsUpEnabled(true)
}
// 설정 저장 후에 호출된다.
val preferenceChangeListener: SharedPreferences.OnSharedPreferenceChangeListener =
SharedPreferences.OnSharedPreferenceChangeListener { var1, key ->
when (key){
"test1", "test2" -> {
val intent: Intent = getIntent()
finish()
startActivity(intent)
}
else -> {
}
}
}
class SettingsFragment(val listener: SharedPreferences.OnSharedPreferenceChangeListener) : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.root_preferences, rootKey)
// setOnPreferenceChangeListener 설정 저장전에 체크해서 저장할지 선택할 수 있다.
findPreference<ListPreference>("test1")?.setOnPreferenceChangeListener { preference, newValue ->
return@setOnPreferenceChangeListener true
}
}
// OnSharedPreferenceChangeListener를 사용하기 위한 코드.
override fun onResume() {
super.onResume()
preferenceManager.sharedPreferences.registerOnSharedPreferenceChangeListener(listener)
}
override fun onPause() {
super.onPause()
preferenceManager.sharedPreferences.unregisterOnSharedPreferenceChangeListener(listener)
}
}
}
설정값을 변경할때 두가지 리스너로 콜백 받을수 있다.
setOnPreferenceChangeListener - 설정 저장전에 체크해서 저장할지 선택할 수 있다.
SharedPreferences.OnSharedPreferenceChangeListener - 설정 저장 후에 호출된다.
getSharedPreferences 로 저장값을 읽어올 수 있다.
저장값을 읽어오는 방법과 폴더는 아래 링크 참조.
댓글
댓글 쓰기