2012-04-12 3 views
3

Я пытаюсь создать пользовательский компонент, который наследуется от RelativeLayout.Как читать андроид: src в моем настраиваемом компоненте

В моем файле макета XML, у меня есть:

<Mycomponent 
    android:src="@drawable/my_test_image"> 
     <TestView> 
</Mycomponent> 

Мой вопрос, как я могу создать класс рисуем в конструкторе MyComponent?

Я попытался прочитать исходный код ImageView, но, похоже, он попытался использовать некоторые android Internal.R.

В любом случае, я могу это сделать в своем коде.

Спасибо.

+0

Вы хотите получить drawable 'my_test_image' в конструкторе пользовательского вида? – Luksprog

+0

Да. Я хочу создать объект Drawable, прочитав «android: src» в XML-файле макета. – michael

ответ

14

Я думаю Luksprog это не так, у меня есть простое решение, чтобы получить доступ к вам пользовательских компонентов данных "SRC" без styleable, просто называя AttributeSet:

attrs.getAttributeResourceValue ("http://schemas.android.com/apk/res/android", "ЦСИ" , 0);

Здесь вы можете увидеть мой пример, чтобы сделать растровые изображения более дешевыми, jeje.

public CustomView(Context context, AttributeSet attrs) { 
super(context, attrs); 
int src_resource = attrs.getAttributeResourceValue("http://schemas.android.com/apk/res/android", "src", 0); 
this.setImageBitmap(getDrawable(getResources(),src_resource)); 
} 

public static Bitmap getDrawable(Resources res, int id){ 
    return BitmapFactory.decodeStream(res.openRawResource(id)); 
} 

Теперь вы будете иметь что-то в XML, как это:

<com.example.com.jfcogato.mycomponent.CustomView 
    android:id="@+id/tAImageView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@drawable/big_image_example"/> 
+1

'this.setImageDrawable (getResources(). GetDrawable (src_resource))' ... должен использоваться для поддержки чертежей всех типов. Ваш код поддерживает только изображения. –

1

Я также видел предложения, которые вы можете сделать это ...

int attributeIds[] = { android.R.attr.src }; 
    TypedArray a = context.obtainStyledAttributes(attributeIds); 
    int resourceId = a.getResourceId(0, 0); 
    a.recycle(); 

В моем опыте этой компилирует код, но возвращает 0 во время выполнения.

Итак, давай ... см. Ответ jfcogato выше.

Смежные вопросы