我正在尝试创建一个继承自RelativeLayout的自定义组件。
在我的xml布局文件中,我有:
<Mycomponent
android:src="@drawable/my_test_image">
<TestView>
</Mycomponent>
我的问题是如何在Mycomponent的构造函数中创建一个Drawable类?
我曾尝试阅读ImageView的源代码,但似乎尝试了一些android Internal.R。
无论如何,我可以在我的代码中执行此操作。
谢谢。
答案 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的回答。