Görünüm sınıfı oluşturma

Oluşturma yöntemini deneyin
Jetpack Compose, Android için önerilen kullanıcı arayüzü araç setidir. Compose'da düzenlerle çalışma hakkında bilgi edinin.

İyi tasarlanmış özel bir görünüm, iyi tasarlanmış diğer sınıflar gibidir. Basit bir arayüze sahip belirli bir işlev kümesini kapsar, CPU ve belleği verimli bir şekilde kullanır ve bu böyle devam eder. Özel bir görünüm, iyi tasarlanmış bir sınıf olmanın yanı sıra aşağıdakileri de yapmalıdır:

  • Android standartlarına uygundur.
  • Android XML düzenleri ile çalışan özel stil özellikleri sağlayın.
  • Erişilebilirlik etkinliklerini gönder.
  • Birden fazla Android platformuyla uyumlu olmalıdır.

Android çerçevesi, bu gereksinimlerin tümünü karşılayan bir görünüm oluşturmanıza yardımcı olmak için 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.

Ek bilgileri Özel görünüm bileşenleri bölümünde bulabilirsiniz.

Bir görünümü alt sınıflandırma

Android çerçevesinde tanımlanan tüm görünüm sınıfları View kapsamını genişletir. Özel görünümünüz, View öğesini doğrudan da 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, bir Context ve AttributeSet nesnesini parametre olarak alan bir kurucu 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 stilini belirleyebilirsiniz. Bu davranışı özel görünümünüzde 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 açıklanmaktadır. Sonraki bölümde, çalışma zamanında değerleri alma ve uygulama ele alınmaktadır.

Özel özellikleri tanımlamak için projenize <declare-styleable> kaynakları ekleyin. Bu kaynaklar res/values/attrs.xml dosyasına yerleştirilir. Örnek bir attrs.xml dosyası:

<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 varlığa ait iki özel özellik (showText ve labelPosition) tanımlar. Stile sahip varlığın adı, kural gereği, özel görünümü tanımlayan sınıfın adıyla aynıdır. Bu kurala uymak gerekli olmasa da birçok popüler kod düzenleyicisi, ifade tamamlamayı sağlamak için bu adlandırma kuralına güvenir.

Özel özellikleri tanımladıktan sonra, bunları yerleşik özellikler gibi düzen XML dosyalarında kullanabilirsiniz. Aradaki 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] ad alanına aittir. Ö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>

Örnek, uzun ad alanı URI'sını tekrarlamak zorunda kalmamak için xmlns yönergesini kullanır. Bu yönerge, custom takma adını http://schemas.android.com/apk/res/com.example.customviews ad alanına atar. Ad alanınız için istediğiniz herhangi bir takma adı seçebilirsiniz.

Düzene özel görünüm ekleyen XML etiketinin adına dikkat edin. Bu, özel görünüm sınıfının tam adıdır. Görüntüleme sınıfınız bir iç sınıfsa görünümün dış sınıfının adıyla ayrıca nitelendirin. Örneğin, PieChart sınıfının PieView adında bir iç sınıfı vardır. Bu sınıftaki özel özellikleri kullanmak için com.example.customviews.charting.PieChart$PieView etiketini kullanın.

Özel özellikleri uygulama

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 aktarılır. Değerler doğrudan AttributeSet öğesinden okunabilir olsa da bu işlemin bazı dezavantajları vardır:

  • Özellik değerlerindeki kaynak referansları çözümlenmez.
  • Stiller uygulanmadı.

Bunun yerine, AttributeSet öğesini obtainStyledAttributes() adresine iletin. Bu yöntem, zaten referansı kaldırılmış ve stili kaldırılmış bir TypedArray değer dizisini geri gönderir.

Android kaynak derleyicisi, obtainStyledAttributes() çağrısını kolaylaştırmak için birçok işlem gerçekleştirir. Oluşturulan R.java, res/ dizinindeki her bir <declare-styleable> kaynağı için hem özellik kimlikleri dizisi hem de dizideki her özelliğin dizinini tanımlayan bir sabit değer grubu tanımlar. TypedArray öğesinden özellikleri okumak için önceden tanımlanmış sabit değerleri kullanırsınız. PieChart sınıfı, özelliklerini şu şekilde okur:

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ülmeleri gerektiğini unutmayın.

Mülk ve etkinlik ekleme

Özellikler, görünümlerin davranışını ve görünümünü kontrol etmenin etkili 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 ayarlayıcı çifti gösterin. Aşağıdaki snippet'te PieChart öğesinin, showText adlı bir özelliği nasıl açığa çıkardığı 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() çağırdığına dikkat edin. Bu çağrılar, görünümün güvenilir şekilde çalıştığından emin olmak açısından çok önemlidir. Sistemin görünümü yeniden çizmesi gerektiğini bilebilmesi için, özelliklerinde yapılan herhangi bir değişiklikten sonra görünümü geçersiz kılmanız gerekir. Benzer şekilde, bir özellik görünümün boyutunu veya şeklini etkileyebilecek bir şekilde değişirse yeni bir düzen istemeniz gerekir. Bu yöntem çağrılarının unutulması, bulunması zor hatalara neden olabilir.

Özel görünümler, önemli etkinliklerin iletilmesi için etkinlik işleyicileri de desteklemelidir. Örneğin PieChart, OnCurrentItemChanged adlı özel etkinliği göstererek kullanıcının yeni bir pasta dilimine odaklanmak için pasta grafiği döndürdüğünü dinleyicilere bildirir.

Özellikle özel görünümün tek kullanıcısı siz olduğunuzda özellikleri ve etkinlikleri göstermeyi kolayca unutabilirsiniz. Görünümünüzün arayüzünü dikkatlice tanımlamak için zaman ayırmak, gelecekteki bakım maliyetlerini azaltır. Uyulması gereken bir kural da özel görünümünüzün görünür görünümünü veya davranışını etkileyen özellikleri her zaman göstermektir.

Erişilebilirliğe önem veren 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 buna dahildir. Engelli kullanıcıları desteklemek için şunları 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 Uygulamaları daha erişilebilir hale getirme başlıklı makaleyi inceleyin.