설정 Part of Android Jetpack.
설정에서는 사용자가 애플리케이션의 기능과 동작을 변경할 수 있습니다. 설정은 백그라운드 동작에 영향을 미치거나(예: 애플리케이션이 데이터와 클라우드를 동기화하는 빈도를 변경) 그보다 광범위하게 적용될 수 있습니다(예:사용자 인터페이스의 콘텐츠 및 표시 방식 변경).
사용자가 구성 가능한 설정을 애플리케이션에 통합할 때 권장하는 방법은 AndroidX Preference 라이브러리를 사용하는 것입니다. 이 라이브러리는 사용자 인터페이스를 관리하고 스토리지와 상호작용하여 사용자가 구성할 수 있는 개별 설정만 정의합니다. 이 라이브러리에는 모든 기기와 OS 버전에 일관적인 사용자 환경을 제공하는 머티리얼 테마가 있습니다.
시작하기
Preference
는 Preference 라이브러리의 기본 구성요소입니다. 설정 화면에는 Preference
hierarchy가 있습니다. 이 계층 구조를 XML 리소스로 정의하거나 코드로 계층 구조를 빌드할 수 있습니다.
아래의 섹션에서는AndroidX Preference 라이브러리를 사용하여 간단한 설정 화면을 빌드하는 방법을 설명합니다.
계층 구조 만들기
다음 예시에서는 XML을 통해 정의된 간단한 계층 구조를 보여줍니다.
<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"/> </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
를 사용할 때와 마찬가지로 이 Fragment
를 Activity
로 추가할 수 있습니다.
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(); } }