2012-11-22 18 views
7

Android XML dosyasında belirtilen niteliklerden biri olarak bir renk alan özel bir sınıf oluşturmak istiyorum. Bununla birlikte, bir renk bir kaynak olabilir veya bir dizi doğrudan renk spesifikasyonundan biri olabilir (örneğin bir hex değeri). Rengi temsil etmek için AttributeSet'u kullanmak için basit bir tercih edilen yöntem var mıdır, çünkü bir rengi temsil eden bir tamsayı bir kaynak değerine veya bir ARGB değerine mi işaret edebilir?Bir AttributeSet'ten nasıl güvenilir bir renk alabilirim?

cevap

22

Diyelim ki bu gibi özel renk özelliğini tanımladık diyelim:

public ColorView(Context context, AttributeSet attrs) { 
    super(context, attrs); 

    TypedArray a = context.obtainStyledAttributes(attrs,R.styleable.color_view); 
    try { 
     int color = a.getColor(R.styleable.color_view_my_color, 0); 
     setBackgroundColor(color); 
    } finally { 
     a.recycle(); 
    } 
} 

Değilsin: En bakış kurucusundaki Sonra

<declare-styleable name="color_view"> 
    <attr name="my_color" format="color" /> 
</declare-styleable> 

, böyle bir renk alabilir Aslında, renk özniteliğinin nasıl doldurulduğu konusunda endişelenmeliyiz, ya bu gibi

ya da bu gibi:

<com.test.ColorView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    app:my_color="@color/red" 
    /> 

getColor yöntemi, herhangi bir durumda, bir renk değerini döndürür.

+3

Harika, teşekkürler! (# # F00 'nin de güzel kullanımı) :) –

+9

'TypedArray'ınızı geri dönüştürmeyi unutmayın. –

İlgili konular