Register now for Android Dev Summit 2019!

설정   Part of Android Jetpack.

설정에서는 사용자가 애플리케이션의 기능과 동작을 변경할 수 있습니다. 설정은 백그라운드 동작에 영향을 미치거나(예: 애플리케이션이 데이터와 클라우드를 동기화하는 빈도를 변경) 그보다 광범위하게 적용될 수 있습니다(예: 사용자 인터페이스의 콘텐츠 및 표시 방식 변경).

사용자가 구성 가능한 설정을 애플리케이션에 통합할 때 권장하는 방법은 AndroidX Preference 라이브러리를 사용하는 것입니다. 이 라이브러리는 사용자 인터페이스를 관리하고 스토리지와 상호작용하여 사용자가 구성할 수 있는 개별 설정만 정의합니다. 이 라이브러리에는 모든 기기와 OS 버전에 일관적인 사용자 환경을 제공하는 머티리얼 테마가 있습니다.

시작하기

Preference는 Preference 라이브러리의 기본 구성 요소입니다. 설정 화면에는 Preference hierarchy가 있습니다. 이 계층 구조를 XML 리소스로 정의하거나 코드로 계층 구조를 빌드할 수 있습니다.

아래의 섹션에서는 AndroidX Preference 라이브러리를 사용하여 간단한 설정 화면을 빌드하는 방법을 설명합니다.

계층 구조 생성

다음 예시에서는 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>

이 계층 구조에는 두 개의 개별 Preferences가 포함됩니다. 사용자가 설정을 활성화하거나 비활성화할 수 있는 SwitchPreferenceCompat와 위젯이 없는 기본 Preference가 있습니다.

계층 구조를 빌드할 때는 각 Preference에 고유한 키가 있어야 합니다.

계층 구조 확장

XML 속성에서 계층 구조를 확장하려면 PreferenceFragmentCompat를 만들고, onCreatePreferences()를 재정의하고, 확장하기 위한 XML 리소스를 제공하세요. 다음 예시를 참조하세요.

Kotlin

class MySettingsFragment : PreferenceFragmentCompat() {
    override fun onCreatePreferences(savedInstanceState: Bundle, rootKey: String) {
        setPreferencesFromResource(R.xml.preferences, rootKey)
    }
}

Java

public class MySettingsFragment extends PreferenceFragmentCompat {
    @Override
    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
        setPreferencesFromResource(R.xml.preferences, rootKey);
    }
}

그런 다음 다른 Fragment를 사용할 때와 마찬가지로 이 FragmentActivity로 추가할 수 있습니다.

Kotlin

class MySettingsActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        supportFragmentManager
                .beginTransaction()
                .replace(R.id.settings_container, MySettingsFragment())
                .commit()
    }
}

Java

public class MySettingsActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getSupportFragmentManager()
                .beginTransaction()
                .replace(R.id.settings_container, new MySettingsFragment())
                .commit();
    }
}