설정   Android Jetpack의 구성요소

설정을 통해 사용자는 앱의 기능과 동작을 변경할 수 있습니다. 설정에서 백그라운드 동작에 영향을 미칩니다. 즉, 앱이 데이터를 콘텐츠를 변경하는 등 더 폭넓게 제공될 수도 있습니다. 자세히 살펴보겠습니다.

사용자가 구성 가능한 설정을 앱에 통합하려면 AndroidX를 사용합니다. 환경설정 라이브러리. 이 라이브러리는 사용자 인터페이스를 관리하고 사용자가 스토리지에 액세스하여 관리할 수 있는 구성합니다 이 라이브러리에는 머티리얼 디자인 테마가 있어 여러 기기와 OS 버전에서 일관된 사용자 경험을 제공합니다

시작하기

Preference은 기본 건물입니다. 환경설정 라이브러리의 블록입니다. 설정 화면에는 Preference가 포함되어 있습니다. 계층 구조. 이 계층 구조를 XML 리소스로 정의하거나 계층 구조입니다.

다음 섹션에서는 AndroidX 환경설정 라이브러리

시작하기 전에 build.gradle에 Preference 라이브러리 종속 항목을 추가합니다. 파일:

Groovy

dependencies {     implementation "androidx.preference:preference-ktx:1.2.0" }

Kotlin

dependencies {     implementation("androidx.preference:preference-ktx:1.2.0") }

Gradle 동기화 후에는 작업의 XML 부분으로 이동할 수 있습니다.

계층 구조 만들기

프로젝트에서 res/xml 폴더로 이동하여 preferences.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>

이 계층 구조에는 두 개의 Preference 객체가 포함됩니다. SwitchPreferenceCompat 사용자가 설정을 켜고 끌 수 있고 기본 Preference를 설정할 수 있는데 위젯에 추가합니다.

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

계층 구조 확장

XML 속성에서 계층 구조를 확장하려면 PreferenceFragmentCompat님, 재정의하다 onCreatePreferences(), 다음 예와 같이 확장할 XML 리소스를 제공합니다.

Kotlin

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

자바

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

그런 다음 다른 작업을 하는 것처럼 이 FragmentActivity에 추가할 수 있습니다. Fragment:

Kotlin

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

자바

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

결과는 다음 이미지에 표시됩니다.

환경설정 화면의 예를 보여주는 이미지
그림 1. 두 개의 Preference를 사용하여 만든 설정 화면 객체입니다.

환경설정 모니터링

다음에 대한 리스너를 등록하여 환경설정이 변경될 때 이벤트를 가져올 수 있습니다. 다음과 같습니다.

Kotlin

findPreference<SwitchPreferenceCompat>("notifications")     ?.setOnPreferenceChangeListener { _, newValue ->         Log.d("Preferences", "Notifications enabled: $newValue")         true // Return true if the event is handled.     }  findPreference<Preference>("feedback")     ?.setOnPreferenceClickListener {         Log.d("Preferences", "Feedback was clicked")         true // Return true if the click is handled.     }

자바

SwitchPreferenceCompat notificationsPref = findPreference("notifications");  if (notificationsPref != null) {     notificationsPref.setOnPreferenceChangeListener((preference, newValue) -> {         Log.d("Preferences", String.format("Notifications enabled: %s", newValue));         return true; // Return true if the event is handled.     }); }  Preference feedbackPref = findPreference("feedback");  if (feedbackPref != null) {     feedbackPref.setOnPreferenceClickListener((preference) -> {         Log.d("Preferences", "Feedback was clicked");         return true; // Return true if the event is handled.     }); }

현재 환경설정 값 읽기

PreferenceFragmentCompat은(는) 데이터를 저장 및 저장하는 데 사용되는 환경설정을 읽습니다. 그러나 모든 것은 SharedPreferences)를 사용하면 이 값을 평소와 같이 읽을 수 있습니다. SharedPreferences:

Kotlin

val preferences = PreferenceManager.getDefaultSharedPreferences(this).all  preferences.forEach {     Log.d("Preferences", "${it.key} -> ${it.value}") }

자바

var preferences = PreferenceManager.getDefaultSharedPreferences(context).getAll();  preferences.forEach((key, value) ->{     Log.d("Preferences", String.format("%s -> %s", key, value)); });

이전 스니펫은 기본 SharedPreferences 인스턴스를 가져옵니다. 저장된 모든 값에 액세스하고, 이를 루프 처리하여 Logcat.