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:
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. }
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:
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); } } }
Ö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:
Kotlin
listPreference.summaryProvider = ListPreference.SimpleSummaryProvider.getInstance() editTextPreference.summaryProvider = EditTextPreference.SimpleSummaryProvider.getInstance()
Java
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:
Ö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:
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
ö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.
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); } }); }
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:
Kotlin
val intent = Intent(context, ExampleActivity::class.java) activityPreference.setIntent(intent)
Java
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>
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
ü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:
Kotlin
onClickPreference.setOnPreferenceClickListener({ // Do something. true })
Java
onClickPreference.setOnPreferenceClickListener(preference -> { // Do something. return true; });