본문 바로가기
프로그래밍/Android

[Android] 앱의 설정화면구현(SwitchPreferenceCompat)

by Youngs_ 2023. 12. 26.

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] 환경설정 프래그먼트 / PreferenceFragmentCompat

참고 사이트 Keyword : PreferenceFragmentCompat 1. gradle 추가implementation 'com.android.support:preference-v7:27.0.0' 2. value 디렉토리에 xml 디렉토리 생성 & settings_preference.xml 생성: 이 xml 파일에 추가하고싶은 옵션 항

dayglo.tistory.com

 

댓글