我想制作一个带有清除按钮的EditText复合控件。由于主要功能将是EditText功能,我希望它在布局xmls中可以使用EditText的所有属性进行声明。但是,它实际上是一个带有EditText和ImageButton的LinearLayout。
另外,我希望它可以像代码中的EditText一样使用,所以我可以将其作为替代品放入。
到目前为止我有这个布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:background="@android:drawable/editbox_background" >
<EditText
android:id="@+id/editText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_gravity="center_vertical"
android:background="#FFF" />
<ImageButton
android:id="@+id/clear"
android:src="@drawable/clear_text"
android:background="#FFF"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical" />
</LinearLayout>
但我不确定如何继续。如果我需要将EditText作为LinearLayout来使用此布局,如何定义一个扩展EditText的控件?或者我唯一的选择是在onDraw()中手动绘制x并自己处理点击?
答案 0 :(得分:0)
public class myedittext extends LinearLayout{
EditText e1;
ImageButton ib;
OnClickListener cleartext;
public myedittext(Context c){
super(c);
String inflater=context.LAYOUT_INFLATER_SERVICE;
LayoutInflater lif;
li=(LayoutInflater)getContext().getSystemService(inflater);
li.inflate((R.layout.yourlayoutname,this,true);
e1=(EditText)findViewById(R.id.editText);
ib=(ImageButton)findViewById(R.id.clear);
cleartext = new OnClickListener(){
@Override
public void onClick(View v) {
e1.setText("");
}
};
ib.setOnClickListener(cleartext);
}
}
答案 1 :(得分:-1)
您可以声明一个自定义视图类,它与您的XML一样从LinearLayout
扩展。然后加载Xml并将其添加到自定义视图中。
如果要在XML中使用它,首先应该通过attrs.xml声明自己的XML属性,如下所示
<declare-styleable name="CustomEditText">
<attr name="text" format="string" />
</declare-styleable>
然后使用Attributes attrs
覆盖构造函数并解析attrs,如下面的代码
TypedArray a = context.obtainStyledAttributes(attrs,R.styleable.CustomEditText);
CharSequence s = a.getString(R.styleable.CustomEditText_text);
setText(s.toString());
在XML中使用它:
xmlns:anything="http://schemas.android.com/apk/res/yourpackagename" // for declare your namespace
<yourpackagename
android:background="@drawable/blue"
android:layout_width="match_parent"
android:layout_height="wrap_content"
anything:text="hi"/>
要像代码中的editText
一样使用它,只需包装自定义视图类。