格式属性值“android:drawable”无效

我试图创build自定义属性到我的button,但我不知道我必须使用属性声明中的图像的格式…

<?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="TCButton"> <attr name="Text" format="string"/> <attr name="BackgroundImage" format="android:drawable" /> </declare-styleable> </resources> 

错误是格式=“android:drawable”…

您可以使用format =“integer” ,drawable的资源IDAttributeSet.getDrawable(…)

这是一个例子。

在res / values / attrs.xml中声明该属性为整数:

 <resources> <declare-styleable name="MyLayout"> <attr name="icon" format="integer" /> </declare-styleable> </resources> 

在布局中将该属性设置为可绘制的ID:

 <se.jog.MyLayout android:layout_width="wrap_content" android:layout_height="wrap_content" myapp:icon="@drawable/myImage" /> 

从您的自定义小部件组件类的属性中获取drawable:

 ImageView myIcon; //... TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MyLayout); Drawable drawable = a.getDrawable(R.styleable.MyLayout_icon); if (drawable != null) myIcon.setBackgroundDrawable(drawable); 

要查看所有选项,可以在这里查看android src

我认为将它作为一个简单的参考将会更好:

 <declare-styleable name="TCButton"> <attr name="customText" format="string"/> <attr name="backgroundImage" format="reference" /> </declare-styleable> 

并将其设置在你的xml中,如下所示:

 <your.package.name.TCButton android:layout_width="wrap_content" android:layout_height="wrap_content" custom:customText="Some custom text" custom:backgroundImage="@drawable/myImage" /> 

并在你的课堂上设置这样的属性:

 public TCButton(Context context, AttributeSet attrs) { super(context, attrs); TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.MembershipItemView, 0, 0); String customText; Drawable backgroundImage; try { customText = a.getString(R.styleable.TCButton_customText); backgroundImage = a.getDrawable(R.styleable.TCButton_backgroundImage); } finally { a.recycle(); } if(!TextUtils.isEmpty(customText)) { ((TextView)findViewById(R.id.yourTextView)).setText(customText); } if(null != backgroundImage) { ((ImageView)findViewById(R.id.yourImageView)).setBackgroundDrawable(backgroundImage); } } 

PS:不要忘记添加这一行为你使用自定义视图的布局的根元素

 xmlns:custom="http://schemas.android.com/apk/res-auto" 

如果你没有设置这个,你将无法访问你的自定义属性。