設定を整理する Android Jetpack の一部。
設定画面が大きく複雑な場合、ユーザーが 特定の設定を選択して変更できますPreference ライブラリは、 設定画面をわかりやすく整理できます。
Preference のカテゴリ
関連するキーワードが複数ある場合
同じプロジェクトの Preference
オブジェクト
グループ化するには、
PreferenceCategory
。
PreferenceCategory
は、カテゴリのタイトルを表示し、各カテゴリを視覚的に区切って表示します。
あります。
XML で PreferenceCategory
を定義するには、Preference
タグを
PreferenceCategory
:
<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto"> <PreferenceCategory app:key="notifications_category" app:title="Notifications"> <SwitchPreferenceCompat app:key="notifications" app:title="Enable message notifications"/> </PreferenceCategory> <PreferenceCategory app:key="help_category" app:title="Help"> <Preference app:key="feedback" app:summary="Report technical issues or suggest new features" app:title="Send feedback"/> </PreferenceCategory> </PreferenceScreen>
結果は次のようになります。
階層を複数の画面に分割する
Preference
オブジェクトまたは個別のカテゴリが多数ある場合は、
それぞれ別の画面に表示できます各画面は
独自の独立した階層を持つ PreferenceFragmentCompat
。Preference
個のオブジェクト
をリンクさせると、関連するコンテンツを含むサブ画面に、
設定。
図 2 は、メッセージと 同期。
図 3 は、複数の画面に分割された同じ設定を示しています。
画面を Preference
でリンクするには、XML で app:fragment
を宣言するか、
使用して、
Preference.setFragment()
。
次の場合に PreferenceFragmentCompat
の完全なパッケージ名を起動する
次の例のように、Preference
がタップされます。
<Preference app:fragment="com.example.SyncFragment" .../>
関連する Fragment
を含む Preference
をユーザーがタップすると、インターフェース メソッドの PreferenceFragmentCompat.OnPreferenceStartFragmentCallback.onPreferenceStartFragment()
が呼び出されます。このメソッドでは、新しい画面の表示を処理し、
画面は周囲の Activity
に実装されます。
標準的な実装は次のようになります。
Kotlin
class MyActivity : AppCompatActivity(), PreferenceFragmentCompat.OnPreferenceStartFragmentCallback { ... override fun onPreferenceStartFragment(caller: PreferenceFragmentCompat, pref: Preference): Boolean { // Instantiate the new Fragment. val args = pref.extras val fragment = supportFragmentManager.fragmentFactory.instantiate( classLoader, pref.fragment) fragment.arguments = args fragment.setTargetFragment(caller, 0) // Replace the existing Fragment with the new Fragment. supportFragmentManager.beginTransaction() .replace(R.id.settings_container, fragment) .addToBackStack(null) .commit() return true } }
Java
public class MyActivity extends AppCompatActivity implements PreferenceFragmentCompat.OnPreferenceStartFragmentCallback { ... @Override public boolean onPreferenceStartFragment(PreferenceFragmentCompat caller, Preference pref) { // Instantiate the new Fragment. final Bundle args = pref.getExtras(); final Fragment fragment = getSupportFragmentManager().getFragmentFactory().instantiate( getClassLoader(), pref.getFragment()); fragment.setArguments(args); fragment.setTargetFragment(caller, 0); // Replace the existing Fragment with the new Fragment. getSupportFragmentManager().beginTransaction() .replace(R.id.settings_container, fragment) .addToBackStack(null) .commit(); return true; } }
PreferenceScreens
ネストされたフィールドを使用して、同じ XML リソース内でネストされた階層を宣言する
<PreferenceScreen>
はサポートされなくなりました。ネストされた Fragment
オブジェクトを使用する
してください。
別々の Activity を使用する
また、各画面を詳細にカスタマイズする必要がある場合や、画面間で Activity
を完全に遷移する場合は、PreferenceFragmentCompat
ごとに別々の Activity
を使用できます。こうすることで、各 Activity
とそれに対応する設定画面を完全にカスタマイズできます。ほとんどのアプリで、
推奨されています。代わりに、前述のように Fragments
を使用してください。
Preference
から Activity
を起動する方法については、以下をご覧ください。
設定アクション。