設定 Part of Android Jetpack.
設定によりユーザーは、アプリケーションの機能や動作を変更することができます。設定は、アプリケーションがクラウドとデータを同期する頻度などのバックグラウンドの動作に影響することがあります。また、ユーザー インターフェースのコンテンツや表示の変更など、さらに広い範囲に影響する場合もあります。
ユーザーが設定可能な設定をアプリケーションに組み込むための推奨方法は、AndroidX Preference Library を使用することです。ユーザー インターフェースの管理やストレージとのやり取りはこのライブラリで実行されるため、開発者はユーザーが設定できる個々の設定値だけを定義します。ライブラリにはマテリアル テーマが付いており、このテーマにより、異なる端末や OS バージョンの間で一貫したユーザー エクスペリエンスが提供されます。
スタートガイド
Preference
は、Preference Library の基本的なビルディング ブロックとなるものです。設定画面には、Preference
階層があります。この階層を XML リソースとして定義することもできますし、あるいはコードに階層をビルドするすることもできます。
以下のセクションでは、AndroidX Preference Library を使用してシンプルな設定画面をビルドする方法について説明します。
階層を作成する
次の例は、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 つの別個の Preferences
が含まれています。1 つはユーザーが設定のオンとオフを切り替えることかできる SwitchPreferenceCompat
、もう 1 つはウィジェットなしの基本的な 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(); } }