我想创建一个Compound视图,它包含一个ImageView,一个TextView和一个EditText
我发现了this lovely tutorial如何做到这一点,我的复合视图看起来很棒
现在我要复制TextView具有的所有属性,EditText具有的所有属性以及ImageView的所有属性
这样我就可以在我的自定义视图中通过xml设置它们。
<declare-styleable name="MyCustomView">
<attr name="mcv_label" format="string" />
<attr name="mcv_fieldText" format="string" />
<attr name="mcv_fieldHint" format="string" />
<attr name="mcv_label_id" format="reference" />
<attr name="mcv_field_id" format="reference" />
</declare-styleable>
我当然能够在xml中定义它们
关键是我想做什么
<com.lenabru.myapp.widget.MyCustomView
style="@style/tableRowStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
mcv:mcv_label_id="@+id/tvLabel"
android:text="@string/someText" <=== this line
/>
没有将所有属性别名化为mcv styable
有可能吗?
MyCustomView.java
public class MyCustomView extends TableRow{
private EditText editText;
private TextView label;
private ImageView image;
private int labelId;
private int formFieldId;
public FormField(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
initAttributes(context,attrs, 0);
}
public FormField(Context context) {
super(context);
initAttributes(context,null, 0);
}
private void initAttributes(Context context, AttributeSet attrs, int defStyle) {
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.form_field, this,true);
label = (TextView)findViewById(R.id.label);
editText = (EditText)findViewById(R.id.editText);
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.FormField, defStyle, 0);
if(a.hasValue(R.styleable.MyCustomView_mvc_label_id)) {
labelId = a.getResourceId(R.styleable.FormField_ff_label_id, 0);
if(labelId!=0) {
label.setId(labelId);
}
}
a.recycle();
}
}