設定をカスタマイズする Android Jetpack の一部。
このドキュメントでは、カスタマイズの方法について説明します。
階層内の Preference
オブジェクト。
設定を見つける
Preference
値の取得や設定を行う場合など、個々の Preference
にアクセスするには、PreferenceFragmentCompat.findPreference()
を使用します。このメソッドは、特定のキーが設定された Preference
を階層全体から検索します。
たとえば、
EditTextPreference
と
キーに "signature"
を付けるには、次の操作を行います。
<EditTextPreference
app:key="signature"
app:title="Your signature"/>
次のコードを使用して、この Preference
を取得します。
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.preferences, rootKey)
val signaturePreference: EditTextPreference? = findPreference("signature")
// Do something with this preference.
}
@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
次の条件を満たす必要があります。
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.preferences, rootKey)
if(/*some feature*/) {
val signaturePreference: EditTextPreference? = findPreference("signature")
signaturePreference?.isVisible = true
}
}
@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
にそのインスタンスを設定することもできます。
listPreference.summaryProvider = ListPreference.SimpleSummaryProvider.getInstance()
editTextPreference.summaryProvider = EditTextPreference.SimpleSummaryProvider.getInstance()
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()
は、表示するサマリーを返します。
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
}
}
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
がユーザーに
できます。
val numberPreference: EditTextPreference? = findPreference("number")
numberPreference?.setOnBindEditTextListener { editText ->
editText.inputType = InputType.TYPE_CLASS_NUMBER
}
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()
を直接使用することもできます。
val intent = Intent(context, ExampleActivity::class.java)
activityPreference.setIntent(intent)
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>
val intent = Intent(Intent.ACTION_VIEW)
intent.data = Uri.parse("http://www.google.com")
val webpagePreference = findPreference
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
を設定するには、次のようなコードを使用します。
onClickPreference.setOnPreferenceClickListener({
// Do something.
true
})
onClickPreference.setOnPreferenceClickListener(preference -> {
// Do something.
return true;
});