設定 Android Jetpack の一部。
ユーザーは設定を使用して、アプリの機能や動作を変更できます。設定でできること データが同期される頻度など、バックグラウンドの動作に コンテンツの変更など、より広範囲に及ぶこともできます。 説明します。
ユーザーが構成可能な設定をアプリに統合するには、AndroidX Preference ライブラリ。このライブラリは、ユーザー インターフェースを管理し、 ユーザーがアクセスできる個々の設定のみを定義するようにします。 ありません。ライブラリには、マテリアル デザインのテーマがあり、 さまざまなデバイスと OS バージョンで一貫したユーザー エクスペリエンスを提供できます。
始める
Preference
は基本的な建物です。
Preference ライブラリのブロックを使用します。設定画面に Preference
が表示されている。
階層。この階層を XML リソースとして定義するか、
示されます。
以降のセクションでは、 AndroidX Preference ライブラリ。
始める前に、Preference ライブラリの依存関係を build.gradle
に追加します。
ファイル:
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>
この階層には、2 つの Preference
オブジェクトが含まれます。
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
を Activity
に追加できます。
Fragment
:
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(); } }
次の図に結果を示します。
設定をモニタリングする
環境設定が変更されたときにイベントを取得するには、 説明します。
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. }
Java
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}") }
Java
var preferences = PreferenceManager.getDefaultSharedPreferences(context).getAll(); preferences.forEach((key, value) ->{ Log.d("Preferences", String.format("%s -> %s", key, value)); });
上記のスニペットでは、デフォルトの SharedPreferences
の
格納されているすべての値にアクセスし、それらの値をループして出力します。
Logcat。