MyView (Bağlam içeriği)
Görünümleri programlı olarak başlatırken kullanılır.
MyView (Bağlam içeriği, AttributeSet attrs)
Tarafından LayoutInflater
xml özniteliklerini uygulamak için kullanılır . Bu özniteliklerden biri adlandırılmışsa style
, mizanpaj xml dosyasında müstehcen değerler aranmadan nitelikler aranır.
MyView (Bağlam bağlamı, AttributeSet attrs, int defStyleAttr)
style
Her bir düzen dosyasında belirtmek zorunda kalmadan tüm widget'lara varsayılan bir stil uygulamak istediğinizi varsayalım . Örnek olarak, tüm onay kutularını varsayılan olarak pembe yapın. Bunu defStyleAttr ile yapabilirsiniz ve çerçeve temanızdaki varsayılan stili arayacaktır.
Bunun bir süre önce defStyleAttr
yanlış adlandırıldığını defStyle
ve bu kurucunun gerçekten gerekli olup olmadığı hakkında bazı tartışmalar olduğunu unutmayın. Bkz. Https://code.google.com/p/android/issues/detail?id=12683
MyView (Bağlam içeriği, AttributeSet attrs, int defStyleAttr, int defStyleRes)
Uygulamaların temel teması üzerinde kontrolünüz varsa 3. kurucu iyi çalışır. Bu, Google için çalışıyor çünkü widget'larını varsayılan Temalar boyunca gönderiyorlar. Ancak, bir widget kitaplığı yazdığınızı ve kullanıcılarınızın temalarını değiştirmesine gerek kalmadan varsayılan bir stilin ayarlanmasını istediğinizi varsayalım. Şimdi bunu defStyleRes
ilk 2 yapıcıdaki varsayılan değere ayarlayarak yapabilirsiniz :
public MyView(Context context) {
super(context, null, 0, R.style.MyViewStyle);
init();
}
public MyView(Context context, AttributeSet attrs) {
super(context, attrs, 0, R.style.MyViewStyle);
init();
}
Neticede
Kendi görüşlerinizi uyguluyorsanız, yalnızca ilk 2 kurucuya ihtiyaç duyulmalıdır ve çerçeve tarafından çağrılabilir.
Görüşlerinizin genişletilebilir olmasını istiyorsanız, sınıfınızın çocukları için küresel stil kullanabilmek için 4. yapıcıyı uygulayabilirsiniz.
3. kurucu için gerçek bir kullanım durumu görmüyorum. Widget'ınız için varsayılan bir stil sağlamaz, ancak yine de kullanıcılarınızın bunu yapabilmesini istiyorsanız bir kısayol olabilir. O kadar da olmamalı.