設定をカスタマイズする Android Jetpack の一部。
このドキュメントでは、カスタマイズの方法について説明します。
階層内の Preference オブジェクト。
設定を見つける
Preference 値の取得や設定を行う場合など、個々の Preference にアクセスするには、PreferenceFragmentCompat.findPreference() を使用します。このメソッドは、特定のキーが設定された Preference を階層全体から検索します。
たとえば、
EditTextPreference と
キーに "signature" を付けるには、次の操作を行います。
<EditTextPreference app:key="signature" app:title="Your signature"/>
次のコードを使用して、この Preference を取得します。
Kotlin
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.preferences, rootKey) val signaturePreference: EditTextPreference? = findPreference("signature") // Do something with this preference. }
Java
@Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { setPreferencesFromResource(R.xml.preferences, rootKey); EditTextPreference signaturePreference = findPreference("signature"); // Do something with this preference. }
Preference の表示を制御する
どの Preference オブジェクトをどのタイミングでユーザーに表示するかを管理できます。
設定画面に移動しますたとえば特定の Preference が、対応する機能が有効な場合にのみ意味を持つ場合、その機能が無効な場合にはその Preference を非表示にすることをおすすめします。
条件が満たされた場合にのみ Preference を表示するには、まず Preference を設定します。
表示を false に設定します。次に例を示します。
<EditTextPreference app:key="signature" app:title="Your signature" app:isPreferenceVisible="false"/>
onCreatePreferences() で、対応するユーザーがPreference
次の条件を満たす必要があります。
Kotlin
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.preferences, rootKey) if(/*some feature*/) { val signaturePreference: EditTextPreference? = findPreference("signature") signaturePreference?.isVisible = true } }
Java
@Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { setPreferencesFromResource(R.xml.preferences, rootKey); if(/*some feature*/) { EditTextPreference signaturePreference = findPreference("signature"); if (signaturePreference != null) { signaturePreference.setVisible(true); } } }
サマリーを動的に更新する
データを保持する Preference は、現在の値を
summary: ユーザーが現在のステータスを
Preference。たとえば、EditTextPreference は保存されたテキストを表示する必要があります。
ListPreference は選択されたリストエントリを表示する必要があります。また、
内部または基づいてサマリーを更新する必要がある Preference オブジェクトがある
外部アプリの状態(バージョンを表示する Preference など)
あります。これを行うには、
SummaryProvider。
SimpleSummaryProvider を使用する
ListPreference と EditTextPreference には、保存されている Preference 値をサマリーとして自動的に表示するシンプルな SummaryProvider の実装が含まれています。値が保存されていない場合は、
表示されます。
XML からこれらの実装を有効にするには、
app:useSimpleSummaryProvider="true"。
また、次の例に示すように、コード内で ListPreference.SimpleSummaryProvider.getInstance() と EditTextPreference.SimpleSummaryProvider.getInstance() を使用してシンプルな SummaryProvider インスタンスを取得し、Preference にそのインスタンスを設定することもできます。
Kotlin
listPreference.summaryProvider = ListPreference.SimpleSummaryProvider.getInstance() editTextPreference.summaryProvider = EditTextPreference.SimpleSummaryProvider.getInstance()
Java
listPreference.setSummaryProvider(ListPreference.SimpleSummaryProvider.getInstance()); editTextPreference.setSummaryProvider(EditTextPreference.SimpleSummaryProvider.getInstance());
カスタムの SummaryProvider を使用する
独自の SummaryProvider を作成して provideSummary() をオーバーライドすることで、Preference からリクエストされるたびにサマリーをカスタマイズできます。対象
次の EditTextPreference は、保存されたファイルの長さを表示します。
値をまとめます。
EditTextPreference の例)。
たとえば、次のような EditTextPreference があるとします。
<EditTextPreference app:key="counting" app:title="Counting preference"/>
onCreatePreferences() では、新しい SummaryProvider を作成してオーバーライドできます。
provideSummary() は、表示するサマリーを返します。
Kotlin
val countingPreference: EditTextPreference? = findPreference("counting") countingPreference?.summaryProvider = SummaryProvider<EditTextPreference> { preference -> val text = preference.text if (text.isNullOrEmpty()) { "Not set" } else { "Length of saved value: " + text.length } }
Java
EditTextPreference countingPreference = findPreference("counting"); if (countingPreference != null) { countingPreference.setSummaryProvider(new SummaryProvider<EditTextPreference>() { @Override public CharSequence provideSummary(EditTextPreference preference) { String text = preference.getText(); if (TextUtils.isEmpty(text) || text == null){ return "Not set"; } return "Length of saved value: " + text.length(); } }); }
Preference の概要に、保存された値の長さまたは「未設定」が表示されます。
保存された値が存在しない場合です。
EditTextPreference ダイアログをカスタマイズする
EditTextPreference ダイアログ内で、次の方法でテキスト フィールドの動作をカスタマイズできます。
添付しています
OnBindEditTextListener。
このリスナーは、ユーザーにダイアログが表示されたときに呼び出されます。
たとえば、数字のみを受け入れるようにダイアログをカスタマイズできます。まずは
EditTextPreference:
<EditTextPreference app:key="number" app:title="Numbers only preference"/>
次に、onCreatePreferences() で新しい OnBindEditTextListener を作成します。
オーバーライド onBindEditText() を使用して、EditText がユーザーに
できます。
Kotlin
val numberPreference: EditTextPreference? = findPreference("number") numberPreference?.setOnBindEditTextListener { editText -> editText.inputType = InputType.TYPE_CLASS_NUMBER }
Java
EditTextPreference numberPreference = findPreference("number"); if (numberPreference != null) { numberPreference.setOnBindEditTextListener( new EditTextPreference.OnBindEditTextListener() { @Override public void onBindEditText(@NonNull EditText editText) { editText.setInputType(InputType.TYPE_CLASS_NUMBER); } }); }
これで、ダイアログがユーザーに表示されるときに、キーボードが数字のみで開きます
モードに設定されるため、ユーザーは EditText に数字のみを入力できます。
Preference のアクション
Preference には、タップされたときの特定のアクションを設定できます。たとえば、
Preference は、アプリの別の部分へのリンクとして機能します。アクションを追加するには
Preference に設定するには、Preference で Intent を直接設定するか、
以下を設定できます
OnPreferenceClickListener
をご覧ください。
Intent を設定する
Preference で Intent を設定して、新しい Fragment を起動できます。
Activity、または Preference がタップされるたびに個別のアプリを作成します。これが
使用するのと同じように、
Context.startActivity()
特定のIntentで
Intent は、XML でネストされた <intent> タグを使用して設定できます。次の
次の例では、Activity を起動する Intent を定義しています。
<Preference app:key="activity" app:title="Launch activity"> <intent android:targetPackage="com.example" android:targetClass="com.example.ExampleActivity"/> </Preference>
または、次のように Preference で setIntent() を直接使用することもできます。
Kotlin
val intent = Intent(context, ExampleActivity::class.java) activityPreference.setIntent(intent)
Java
Intent intent = new Intent(getContext(), ExampleActivity.class); activityPreference.setIntent(intent);
XML を使用して Intent にエクストラを含めることもできます。
<Preference app:key="activity" app:title="Launch activity"> <intent android:targetPackage="com.example" android:targetClass="com.example.ExampleActivity"> <extra android:name="example_key" android:value="example_value"/> </intent> </Preference>
以下に、ウェブページを起動する Intent を含む Preference の例を示します。
<Preference app:key="webpage" app:title="View webpage"> <intent android:action="android.intent.action.VIEW" android:data="http://www.google.com" /> </Preference>
Kotlin
val intent = Intent(Intent.ACTION_VIEW) intent.data = Uri.parse("http://www.google.com") val webpagePreference = findPreference("webpage") webpagePreference?.intent = intent
Java
Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse("http://www.google.com")); webpagePreference.setIntent(intent);
OnPreferenceClickListener
Preference で OnPreferenceClickListener を設定すると、
Preference がタップされたときの onPreferenceClick() へのコールバック。たとえば
次の場合に、リスナーを使用して別の Fragment または Activity に移動できます。
ナビゲーションを処理するためのより複雑なロジックが必要です。
OnPreferenceClickListener を設定するには、次のようなコードを使用します。
Kotlin
onClickPreference.setOnPreferenceClickListener({ // Do something. true })
Java
onClickPreference.setOnPreferenceClickListener(preference -> { // Do something. return true; });