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:
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:
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; });