如何在我的自定义组件中读取android:src

时间:2012-04-12 18:08:57

标签: android custom-component

我正在尝试创建一个继承自RelativeLayout的自定义组件。

在我的xml布局文件中,我有:

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

我的问题是如何在Mycomponent的构造函数中创建一个Drawable类?

我曾尝试阅读ImageView的源代码,但似乎尝试了一些android Internal.R。

无论如何,我可以在我的代码中执行此操作。

谢谢。

2 个答案:

答案 0 :(得分:15)

我认为Luksprog是错误的,我有一个简单的解决方案来访问你自定义组件“src”数据而没有样式,只需调用AttributeSet:

  

attrs.getAttributeResourceValue( “http://schemas.android.com/apk/res/android”,   “src”,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 :(得分:1)

我也看到过你可以这样做的建议......

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

根据我的经验,此代码编译但在运行时返回0.

所以是的......跟上jfcogato的回答。