【Android】편리한 PreferenceFragmentCompat로 설정 화면을 만든다
11747 단어 안드로이드Preference안드로이드 개발
Jetpack Preference
공식 페이지
Jetpack의 Preference를 사용하는 것으로, 설정 화면을 간단하게 작성할 수 있다.
환경 구축
app/build.gradle
에 다음 추가dependencies {
implementation 'androidx.preference:preference:1.0.0'
}
구현
간단한 샘플
우선은 설정의 항목을 정의한,
res/xml/preferences.xml
를 이하의 내용으로 작성한다<androidx.preference.PreferenceScreen
xmlns:app="http://schemas.android.com/apk/res-auto">
<SwitchPreferenceCompat
app:key="notifications"
app:title="Enable message notifications"/>
<Preference
app:key="feedback"
app:title="Send feedback"
app:summary="Report technical issues or suggest new features"/>
</androidx.preference.PreferenceScreen>
※ xml의 루트가
PreferenceScreen
되어 있는 것에 주의그런 다음 PreferenceFragmentCompat을 상속받은 Fragment 만들기
SettingsFragment.kt
class SettingsFragment : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.preferences, rootKey)
}
}
setPreferencesFromResource
에 정의된 res/xml/preferences.xml
설정기본 Activity에서 만든
SettingsFragment
보기SettingsActivity.kt
class SettingsActivity : RxAppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_settings)
supportFragmentManager
.beginTransaction()
.replace(R.id.settingsContainer, SettingsFragment())
.commit()
}
}
레이아웃 파일에 Fragment가 표시되는
FrameLayout
정의res/layout/activity_settings.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.appcompat.widget.Toolbar
android:id="@+id/settingsToolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?attr/actionBarSize"
android:background="?attr/colorPrimaryDark"
app:titleTextColor="@android:color/white"/>
<FrameLayout
android:id="@+id/settingsContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/settingsToolbar"/>
</RelativeLayout>
상기까지 실장하면, 한번 실행해 본다.
res/xml/preferences.xml
에 정의 된 내용이 표시되면 OKSharedPreference 파일 이름
생성되는 SharedPreference 파일 이름은
"${BuildConfig.APPLICATION_ID}_preferences"
된다.
Preference의 종류
목록은 여기
SharedPreferences에 저장되었을 때 뭔가를 원한다면
SharedPreferences.OnSharedPreferenceChangeListener 사용
SharedPreferences#registerOnSharedPreferenceChangeListener
에서 listener를 등록.※ 상기를 익명 함수로 해 버리면 잘 움직이지 않으므로 주의 여기 참조
PreferenceFragmentCompat 종료 시점에 등록 취소
SharedPreferences#unregisterOnSharedPreferenceChangeListener
var sharedPreferences: SharedPreferences? = null
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.preferences, rootKey)
context?.also {
// SharedPreferencesを取得しOnSharedPreferenceChangeListenerを設定
sharedPreferences = it.getSharedPreferences("xxxxxxxxx", Context.MODE_PRIVATE).apply {
registerOnSharedPreferenceChangeListener(changeListener)
}
}
}
override fun onDestroy() {
super.onDestroy()
context?.also {
// OnSharedPreferenceChangeListenerの登録解除
sharedPreferences?.unregisterOnSharedPreferenceChangeListener(changeListener)
}
}
private val changeListener = SharedPreferences.OnSharedPreferenceChangeListener { pref, key ->
// do something
}
관련 링크
Reference
이 문제에 관하여(【Android】편리한 PreferenceFragmentCompat로 설정 화면을 만든다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Slowhand0309/items/ddc5d27f9665fc163399텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)