Keyword : PreferenceFragmentCompat
1. gradle 추가
implementation 'com.android.support:preference-v7:27.0.0'
2. value 디렉토리에 xml 디렉토리 생성 & settings_preference.xml 생성
: 이 xml 파일에 추가하고싶은 옵션 항목을 추가한다. 이 화면이 그대로 추가된다.
3. 나는 아직 푸시 알람 on/off 여부만 설정하는 옵션만 사용하기때문에 SwitchPreference 추가
[settings_preference.xml]
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<SwitchPreferenceCompat
android:key="push_notification"
android:title="푸시 알람 on/off"
/>
</PreferenceScreen>
android:key에서 설정한 이름으로 SharedPreference에 저장되어서 이걸 사용할 수 있다나 뭐라나
아래 XML 화면은 필자가 다른예제를 찾아서 가져온코드이다.
해당 글의 출처에는 이 부분이 없으므로 이부분은 참고만 하면 될 듯 하다.
<PreferenceCategory app:iconSpaceReserved="false" app:key="screen" app:title="@string/setting_category_player"> <Preference app:iconSpaceReserved="false" app:key="@string/preference_pip_ratio_key" app:summary="@string/preference_pip_ratio_summary" app:title="@string/preference_pip_ratio_title" /> <Preference app:iconSpaceReserved="false" app:key="@string/preference_next_action_key" app:summary="@string/preference_next_action_summary" app:title="@string/preference_next_action_title" /> <SwitchPreferenceCompat app:defaultValue="false" app:iconSpaceReserved="false" app:key="@string/preference_player_status_bar_transparent_key" app:summary="@string/preference_player_status_bar_transparent_summary" app:title="@string/preference_player_status_bar_transparent_title" /> <SwitchPreferenceCompat app:defaultValue="true" app:enabled="false" app:iconSpaceReserved="false" app:key="@string/preference_tablet_aspect_key" app:summary="@string/preference_tablet_aspect_summary" app:title="@string/preference_tablet_aspect_title" /> </PreferenceCategory>
4. 자바 코드 구현
: PreferenceFragment는 deprecate되어서 PreferenceFragmentCompat을 사용한다.
[SettingFragment.java]
public class SettingFragment extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
addPreferencesFromResource(R.xml.settings_preference);
}
}
2번에서 생성한 settings_preference.xml을 화면에 띄워주는 것을 확인할 수 있다.
5. 위의 화면은 Fragment이기 때문에 Activity에 실제로 띄워주려면 FragmentManager로 replace 또는 add 해주어야한다.
[MainActivity.java]
: 일반적으로는 Fragment를 화면에 띄우려면 이런 식으로 Fragment를 인자로 넣어서 해당 Fragment를 띄워주는 방식을 사용한다.
private void replaceFragment(Fragment mFragment) {
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction mTransaction = fm.beginTransaction();
mTransaction.replace(R.id.main_fragment, mFragment);
mTransaction.commit();
}
하지만 우리의 SettingFragment.java는 그냥 Fragment가 아닌 PreferenceFragmentCompat 이므로 따로 이것만 띄워주는 메소드를 생성하였다. 음 낭비...
private void replaceSettingFragment() {
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction mTransaction = fm.beginTransaction();
mTransaction.replace(R.id.main_fragment, new SettingFragment());
mTransaction.commit();
}
6. 마지막으로, 이 환경설정 화면의 style을 설정해주어야한다.
[styles.xml]
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="preferenceTheme">@style/PreferenceLocaleTheme</item>
</style>
<style name="PreferenceLocaleTheme" parent="@style/PreferenceThemeOverlay"/>
</resource>
7. 최종화면
출처 : https://dayglo.tistory.com/97
'프로그래밍 > Android' 카테고리의 다른 글
[Android] RecyclerView에 Header, Footer 추가 (0) | 2024.02.22 |
---|---|
[Android] Library 생성 (0) | 2024.02.22 |
[Android] URL scheme, 주소창에서 앱 열기 (1) | 2023.12.04 |
[Android] 원하는시간에 특정작업 하기 (Alarm Manager) (1) | 2023.11.27 |
[Android] SQLite 날짜 비교 (1) | 2023.11.24 |
댓글