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

"Oluştur" yöntemini deneyin
Jetpack Compose, Android için önerilen kullanıcı arayüzü araç setidir. Compose'da düzenlerle nasıl çalışacağınızı öğrenin.

İ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.