Ayarlarınızı özelleştirme Android Jetpack'in bir parçasıdır.
Bu dokümanda, projenizin nasıl özelleştirileceği ve
Hiyerarşinizde Preference
nesne var.
Tercihleri bulma
Tek bir Preference
hesabına erişmek için (örneğin, bir
Preference
değeri, kullanım
PreferenceFragmentCompat.findPreference()
Bu yöntem, hiyerarşinin tamamında verilen anahtara sahip bir Preference
için arama yapar.
Örneğin,
EditTextPreference
anahtarı "signature"
için aşağıdaki işlemleri yapın:
<EditTextPreference
app:key="signature"
app:title="Your signature"/>
Aşağıdaki kodu kullanarak bu Preference
öğesini alın:
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.
}
Tercih görünürlüğünü kontrol et
Kullanıcı tarafından görülebilecek Preference
nesneleri kontrol edebilirsiniz.
bir ayarlar ekranına gidin. Örneğin, belirli bir Preference
yalnızca karşılık gelen özellik etkinleştirildiğinde anlam ifade etmezse, bu noktaları gizlemek
Preference
.
Yalnızca bir koşul karşılandığında Preference
gösterilmesi için önce Preference
özelliğini ayarlayın
aşağıdaki örnekte gösterildiği gibi XML'de false (yanlış) olarak ayarlayın:
<EditTextPreference
app:key="signature"
app:title="Your signature"
app:isPreferenceVisible="false"/>
onCreatePreferences()
içinde, Preference
karşılık gelen
koşul karşılanır:
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);
}
}
}
Özetleri dinamik olarak güncelleme
Verileri saklayan bir Preference
, geçerli değeri
sayfanın mevcut durumunu daha iyi anlamasına yardımcı olacak bir özet
Preference
Örneğin, EditTextPreference
, kayıtlı metni göstermelidir
değeri ve ListPreference
seçili liste girişini göstermelidir. Ayrıca
özetlerini dahili veya harici yapılandırmaya göre güncellemesi gereken Preference
nesne
harici uygulama durumu (örneğin, bir sürümü gösteren Preference
)
sayı. Bunu yapmak için
SummaryProvider
.
SimpleSummaryProvider kullanma
ListPreference
ve
EditTextPreference
otomatik olarak görüntüleyen basit SummaryProvider
uygulamalarını içerme
özet olarak Preference
değeri kaydedildi. Hiçbir değer kaydedilmezse "Not"
ayar."
Bu uygulamaları XML'den etkinleştirmek için
app:useSimpleSummaryProvider="true"
Alternatif olarak, kodda
ListPreference.SimpleSummaryProvider.getInstance()
ve
EditTextPreference.SimpleSummaryProvider.getInstance()
basit SummaryProvider
örneğini alıp
Preference
, aşağıdaki örnekte gösterildiği gibi:
listPreference.summaryProvider = ListPreference.SimpleSummaryProvider.getInstance()
editTextPreference.summaryProvider = EditTextPreference.SimpleSummaryProvider.getInstance()
listPreference.setSummaryProvider(ListPreference.SimpleSummaryProvider.getInstance());
editTextPreference.setSummaryProvider(EditTextPreference.SimpleSummaryProvider.getInstance());
Özel bir SummaryProvider kullanma
Kendi SummaryProvider
öğenizi oluşturup geçersiz kılabilirsiniz
provideSummary()
özelleştirilebilir.Preference
Örneğin,
Örneğin, aşağıdaki EditTextPreference
kaydedilen öğe ile ilişkili
değerini özetleyin:

EditTextPreference
.
Örnek olarak aşağıdaki EditTextPreference
değerini varsayalım:
<EditTextPreference
app:key="counting"
app:title="Counting preference"/>
onCreatePreferences()
ürününde yeni bir SummaryProvider
oluşturup geçersiz kılabilirsiniz.
Özetin gösterilmesini sağlamak için provideSummary()
tuşuna basın:
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
özetinde, kaydedilen değerin uzunluğu veya "Belirlenmedi" durumu gösterilir.
kayıtlı değer olmadığında.
EditTextPreference iletişim kutusunu özelleştirme
EditTextPreference
iletişim kutusunda metin alanı davranışını şu şekilde özelleştirebilirsiniz:
bir
OnBindEditTextListener
İletişim kutusu kullanıcıya gösterildiğinde bu işleyici çağrılır.
Örneğin, bir iletişim kutusunu yalnızca sayıları kabul edecek şekilde özelleştirebilirsiniz. Öncelikle,
EditTextPreference
:
<EditTextPreference
app:key="number"
app:title="Numbers only preference"/>
Sonra, onCreatePreferences()
içinde yeni bir OnBindEditTextListener
oluşturun ve
onBindEditText()
EditText
belirtir.
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);
}
});
}
Artık iletişim kutusu kullanıcıya gösterildiğinde klavye yalnızca sayısal değer olarak açılıyor
modunda olmalıdır, böylece kullanıcı EditText
. alanına yalnızca sayı girebilir.
Tercih işlemleri
Preference
, dokunulduğunda belirli bir işlem gerçekleştirebilir. Örneğin,
Preference
, uygulamanızın ayrı bir bölümüne bağlantı işlevi görebilir. İşlem eklemek için
Preference
olarak doğrudan Preference
üzerinde bir Intent
ayarlayabilir veya
CANNOT TRANSLATE
OnPreferenceClickListener
mantık yürütmeliyiz.
Amaç belirleyin
Yeni bir Fragment
başlatmak için Preference
üzerinde Intent
ayarlayabilirsiniz.
Activity
ya da Preference
her dokunulduğunda ayrı bir uygulama kullanın. Bu,
ile aynı
Context.startActivity()
içeren bir Intent
İç içe yerleştirilmiş bir <intent>
etiketi kullanarak XML'de Intent
ayarlayabilirsiniz. Aşağıdakiler
örneği, Activity
başlatan bir Intent
tanımlar:
<Preference
app:key="activity"
app:title="Launch activity">
<intent
android:targetPackage="com.example"
android:targetClass="com.example.ExampleActivity"/>
</Preference>
Alternatif olarak, aşağıdaki şekilde setIntent()
öğesini doğrudan bir Preference
üzerinde kullanabilirsiniz:
val intent = Intent(context, ExampleActivity::class.java)
activityPreference.setIntent(intent)
Intent intent = new Intent(getContext(), ExampleActivity.class);
activityPreference.setIntent(intent);
Ayrıca XML kullanarak Intent
ile ekstra özellikler de ekleyebilirsiniz:
<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>
Aşağıda, web sayfasını açan Intent
içeren bir Preference
örneği verilmiştir:
<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
üzerinde bir OnPreferenceClickListener
ayarlayabilirsiniz. Bu durumda,
Preference
dokunulduğunda onPreferenceClick()
geri çağrılır. Örneğin,
dinleyiciyi kullanarak başka bir Fragment
veya Activity
konumuna gidebilirsiniz.
kullanımı daha karmaşık bir mantığa sahiptir.
OnPreferenceClickListener
ayarlamak için şuna benzer bir kod kullanın:
onClickPreference.setOnPreferenceClickListener({
// Do something.
true
})
onClickPreference.setOnPreferenceClickListener(preference -> {
// Do something.
return true;
});