2013-08-02 30 views
42

RelativeLayout'u genişleten özel görünümü yazdım. Bence metni var, ben özel bir ad alanı xmlns:xxx benim özel bir görünüm her kullandığınızda kullanarak olmadan <declare-styleable> ve belirtmek için gerek kalmadan standart android:textkullanmak istiyorum. Ben özellik değerini nasıl alabilirimStandart özellik nasıl kullanılır: özel görünümümdeki metin?

<my.app.StatusBar 
    android:id="@+id/statusBar" 
    android:text="this is the title"/> 

:

bu benim özel bir görünüm kullanmak xml nedir? (Attr.xml bir styleable olmadan)

TypedArray a = context.obtainStyledAttributes(attrs, ???); 

ama ne bu durumda ??? olduğu metin niteliğini: Ben robot alabilir mi?

+0

belgeleri okuyun: http://developer.android.com/reference/android/content/Context.html#obtainStyledAttributes (int []) – Raptor

+2

Çok yararlı değil, bana daha fazlasını verebilir misiniz? :) –

+0

Sadece 2. parametreyi atla – Raptor

cevap

69

kullanımı bu:

public YourView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    int[] set = { 
     android.R.attr.background, // idx 0 
     android.R.attr.text  // idx 1 
    }; 
    TypedArray a = context.obtainStyledAttributes(attrs, set); 
    Drawable d = a.getDrawable(0); 
    CharSequence t = a.getText(1); 
    Log.d(TAG, "attrs " + d + " " + t); 
    a.recycle(); 
} 

i bir fikir

+0

evet, işe yarıyor. Teşekkürler! –

+2

Aynı şeyi kullandım ama 'textColor' gibi bazı özellikler için çalışmıyor gibi görünüyor. herhangi bir fikrin var mı? – eluleci

+1

Ne yaptığınızı görmeden nasıl bir fikrim olabilir? – pskink

24

DÜZENLEME

belirterek ile (bunu yapmanın bir başka yolu var umut bir beyan-styleable ama özel bir ilan etmek zorunda değil ad alanı) aşağıdaki gibidir:

attrs.xml:

<declare-styleable name="MyCustomView"> 
    <attr name="android:text" /> 
</declare-styleable> 

MyCustomView.java:

TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MyCustomView); 
CharSequence t = a.getText(R.styleable.MyCustomView_android_text); 
a.recycle(); 

Bu özel görünümler standart özelliklerini çıkarma jenerik Android yol olarak görünmektedir. Android API içinde

, bunlar standart özellikler ile ayıklamak için bir iç R.styleable sınıfını kullanın ve standart özelliklerini ayıklamak için R.styleable kullanmanın diğer alternatifler sunmak görünmüyor.

Orijinal Mesaj

standart bileşenden tüm özelliklerini elde etmelerini sağlamak için, kullanmanız gereken aşağıdaki:

TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.TextView); 
CharSequence t = a.getText(R.styleable.TextView_text); 
int color = a.getColor(R.styleable.TextView_textColor, context.getResources().getColor(android.R.color.darker_gray)); // or other default color 
a.recycle(); 

başka standart bileşeninden özelliklerini isterseniz sadece başka bir TypedArray oluşturmak .

Standart bileşenler için mevcut TypedArrays detayları için http://developer.android.com/reference/android/R.styleable.html'a bakın.

+0

'R.styleable.TextView' –

+0

'çözümlenemiyor': 'geçerli bir kaynak adı karakteri değil. lanet olsun. –

+1

@SashaNos. ':' XML'de kullanılır, ancak kod içindeki kaynak adı için '_' yerine kullanılır. Gönderideki farkı görün. Kafam karıştığında veya yararsızdırsa orijinal gönderiyi sileceğim –

İlgili konular