İyi tasarlanmış bir özel görünüm, iyi tasarlanmış diğer tüm sınıflara benzer. Basit bir arayüzle belirli bir dizi işlevi içerir, CPU ve belleği verimli bir şekilde kullanır. Süreç böyle devam eder. Özel görünüm, iyi tasarlanmış bir sınıf olmanın yanı sıra aşağıdakileri yapmalıdır:
- Android standartlarına uygundur.
- Android XML düzenleriyle çalışan özel stil özellikleri sağlayın.
- Erişilebilirlik etkinlikleri gönderin.
- Çeşitli Android platformlarıyla uyumlu olmalıdır.
Android çerçevesi, tüm bu gereksinimleri karşılayan bir görünüm oluşturmanıza yardımcı olacak bir dizi temel sınıf ve XML etiketi sağlar. Bu derste, bir görünüm sınıfının temel işlevini oluşturmak için Android çerçevesinin nasıl kullanılacağı anlatılmaktadır.
Özel görünüm bileşenleri bölümünde daha fazla bilgi bulabilirsiniz.
Bir görünümü alt sınıfa ekleme
Android çerçevesinde tanımlanan tüm görünüm sınıfları View
öğesini genişletir. Özel görünümünüzle View
öğesini doğrudan genişletebilir veya Button
gibi mevcut görünüm alt sınıflarından birini genişleterek zaman kazanabilirsiniz.
Android Studio'nun görünümünüzle etkileşim kurmasına izin vermek için en azından parametre olarak bir Context
ve AttributeSet
nesnesi alan bir oluşturucu sağlamanız gerekir.
Bu oluşturucu, düzen düzenleyicisinin görünümünüzün bir örneğini oluşturmasına ve düzenlemesine olanak tanır.
Kotlin
class PieChart(context: Context, attrs: AttributeSet) : View(context, attrs)
Java
class PieChart extends View { public PieChart(Context context, AttributeSet attrs) { super(context, attrs); } }
Özel özellikleri tanımlama
Kullanıcı arayüzünüze yerleşik View
eklemek için bunu bir XML öğesinde belirtip görünümünü ve davranışını öğe özellikleriyle kontrol edin. Ayrıca, XML kullanarak özel
görünümler ekleyebilir ve bu görünümlerin stilini belirleyebilirsiniz. Özel görünümünüzde bu davranışı etkinleştirmek için aşağıdakileri yapın:
- Bir
<declare-styleable>
kaynak öğesinde görünümünüz için özel özellikler tanımlayın. - XML düzeninizdeki özelliklerin değerlerini belirtin.
- Çalışma zamanında özellik değerlerini alın.
- Alınan özellik değerlerini görünümünüze uygulayın.
Bu bölümde, özel özelliklerin nasıl tanımlanacağı ve değerlerinin nasıl belirtileceği anlatılmaktadır. Bir sonraki bölümde, değerleri alma ve çalışma zamanında uygulama ele alınmaktadır.
Özel özellikleri tanımlamak için projenize <declare-styleable>
kaynakları ekleyin. Bu kaynakların bir res/values/attrs.xml
dosyasına yerleştirilmesi yaygın bir uygulamadır. Aşağıda, bir attrs.xml
dosyası örneği verilmiştir:
<resources> <declare-styleable name="PieChart"> <attr name="showText" format="boolean" /> <attr name="labelPosition" format="enum"> <enum name="left" value="0"/> <enum name="right" value="1"/> </attr> </declare-styleable> </resources>
Bu kod, PieChart
adlı stile uygun bir varlığa ait showText
ve labelPosition
özel özelliklerini tanımlar. Stil yapılabilir varlığın adı, kural olarak özel görünümü tanımlayan sınıfın adıyla aynı addır. Bu kurala uymak zorunlu olmasa da birçok popüler kod düzenleyicisi, ifade tamamlama sağlamak için bu adlandırma kuralına güvenir.
Özel özellikleri tanımladıktan sonra, düzen XML dosyalarında yerleşik özellikler gibi kullanabilirsiniz. Tek fark, özel özelliklerinizin farklı bir ad alanına ait olmasıdır. Bunlar http://schemas.android.com/apk/res/android
ad alanına ait olmak yerine http://schemas.android.com/apk/res/[your package name]
öğesine ait. Örneğin, PieChart
için tanımlanan özelliklerin nasıl kullanılacağı aşağıda açıklanmıştır:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:custom="http://schemas.android.com/apk/res-auto"> <com.example.customviews.charting.PieChart custom:showText="true" custom:labelPosition="left" /> </LinearLayout>
Uzun ad alanı URI'sini tekrarlamaktan kaçınmak için örnek bir xmlns
yönergesi kullanır. Bu yönerge, http://schemas.android.com/apk/res/com.example.customviews
ad alanına custom
takma adını atar.
Ad alanınız için istediğiniz takma adı seçebilirsiniz.
Özel görünümü düzene ekleyen XML etiketinin adına dikkat edin. Özel görünüm sınıfının tam adıdır. Görünüm sınıfınız iç sınıfsa görünümün dış sınıfının adıyla daha da nitelendirin.
Örneğin, PieChart
sınıfının PieView
adlı bir iç sınıfı vardır. Bu sınıftaki özel özellikleri kullanmak için com.example.customviews.charting.PieChart$PieView
etiketini kullanmalısınız.
Özel özellikler uygula
XML düzeninden bir görünüm oluşturulduğunda, XML etiketindeki tüm özellikler kaynak paketinden okunur ve görünümün oluşturucusuna bir AttributeSet
olarak iletilir.
Değerleri doğrudan AttributeSet
öğesinden okumak mümkün olsa da bunu yapmanın bazı dezavantajları vardır:
- Özellik değerlerindeki kaynak referansları çözümlenmez.
- Stiller uygulanmaz.
Bunun yerine, AttributeSet
öğesini obtainStyledAttributes()
öğesine iletin.
Bu yöntem, referansı kaldırılmış ve stili ayarlanmış bir TypedArray
değer dizisi geri verir.
Android kaynak derleyici, obtainStyledAttributes()
çağrısını kolaylaştırmak için
birçok şey yapar. res/
dizinindeki her <declare-styleable>
kaynağı için oluşturulan R.java
, hem bir özellik kimlikleri dizisi hem de dizideki her özelliğe ait dizini tanımlayan bir sabit değerler kümesi tanımlar. TypedArray
öğesindeki özellikleri okumak için önceden tanımlanmış sabit değerleri kullanırsınız. PieChart
sınıfının özelliklerini şu şekilde okuyabilirsiniz:
Kotlin
init { context.theme.obtainStyledAttributes( attrs, R.styleable.PieChart, 0, 0).apply { try { mShowText = getBoolean(R.styleable.PieChart_showText, false) textPos = getInteger(R.styleable.PieChart_labelPosition, 0) } finally { recycle() } } }
Java
public PieChart(Context context, AttributeSet attrs) { super(context, attrs); TypedArray a = context.getTheme().obtainStyledAttributes( attrs, R.styleable.PieChart, 0, 0); try { mShowText = a.getBoolean(R.styleable.PieChart_showText, false); textPos = a.getInteger(R.styleable.PieChart_labelPosition, 0); } finally { a.recycle(); } }
TypedArray
nesnelerinin paylaşılan bir kaynak olduğunu ve kullanımdan sonra geri dönüştürülmesi gerektiğini unutmayın.
Mülk ve etkinlik ekleme
Özellikler, görünümlerin davranışını ve görünümünü kontrol etmenin güçlü bir yoludur ancak yalnızca görünüm başlatıldığında okunabilir. Dinamik davranış sağlamak amacıyla, her bir özel özellik için bir özellik alıcı ve belirleyici çifti gösterin. Aşağıdaki snippet, PieChart
ürününün showText
adlı bir mülkü nasıl sunduğu gösterilmektedir:
Kotlin
fun isShowText(): Boolean { return mShowText } fun setShowText(showText: Boolean) { mShowText = showText invalidate() requestLayout() }
Java
public boolean isShowText() { return mShowText; } public void setShowText(boolean showText) { mShowText = showText; invalidate(); requestLayout(); }
setShowText
işlevinin invalidate()
ve requestLayout()
yöntemini çağırdığına dikkat edin. Bu çağrılar, görünümün güvenilir şekilde çalıştığından emin olmak için çok önemlidir. Özelliklerinde yapılan ve görünümünü değiştirebilecek herhangi bir değişiklikten sonra görünümü geçersiz kılmanız gerekir. Böylece sistem, görünümün yeniden çizilmesi gerektiğini bilir. Benzer şekilde, bir özellik görünümün boyutunu veya şeklini etkileyebilecek şekilde değişirse yeni bir düzen istemeniz gerekir. Bu yöntem çağrılarını unutmak, bulunması zor hatalara neden olabilir.
Özel görünümler, önemli etkinlikleri iletmek için etkinlik işleyicileri de desteklemelidir. Örneğin PieChart
, OnCurrentItemChanged
adlı özel etkinliği göstererek dinleyicilere, kullanıcının yeni bir pasta dilimine odaklanmak için pasta grafiği döndürdüğünü bildirir.
Özellikle özel görünümü kullanan tek kullanıcı siz olduğunuzda, özellikleri ve etkinlikleri göstermeyi kolayca unutabilirsiniz. Görünümünüzün arayüzünü dikkatli bir şekilde tanımlamak için zaman ayırırsanız, gelecekteki bakım maliyetleri azalır. Uygulanabilecek iyi bir kural, özel görünümünüzün görünür görünümünü veya davranışını etkileyen tüm özellikleri her zaman göstermektir.
Erişilebilirliğe uygun tasarım
Özel görünümünüz çok çeşitli kullanıcıları desteklemelidir. Dokunmatik ekranı görmelerini veya kullanmalarını engelleyen engelli kullanıcılar da bu kapsamdadır. Engelli kullanıcıları desteklemek için aşağıdakileri yapın:
- Giriş alanlarınızı
android:contentDescription
özelliğini kullanarak etiketleyin. - Uygun olduğunda
sendAccessibilityEvent()
numaralı telefonu arayarak erişilebilirlik etkinliklerini gönderin. - D-pad veya iztopu gibi alternatif kumandaları destekleyin.
Erişilebilir görünümler oluşturma hakkında daha fazla bilgi için bkz. Uygulamaları daha erişilebilir hale getirme.