設定を整理する 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
に実装されます。
標準的な実装は次のようになります。
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
}
}
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
を起動する方法については、以下をご覧ください。
設定アクション。