自定义控件-带删除按钮的输入框

再来看一个组合控件,带删除按钮的EidtText。即在用户输入后,会出现删除按钮,点击即可取消用户输入。首先写一个自定义控件的布局:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
> 
<EditText 
android:id="@+id/et" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:singleLine="true" 
/> 
<ImageButton 
android:id="@+id/ib" 
android:visibility="gone" 
android:src="@drawable/menu_delete" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:background="#00000000" 
android:layout_alignRight="@+id/et" /> 
</RelativeLayout> 


实现输入框右侧带按钮效果,注意将按钮隐藏。然后写一个EditCancel类,实现删除用户输入功能。这里用到了TextWatch这个接口,监听输入框中的文字变化。使用也很简单,实现他的三个方法即可。看代码:


import android.content.Context;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.LinearLayout;


public class EditCancel extends LinearLayout implements EdtInterface {
ImageButton ib;
EditText et;
public EditCancel(Context context) {
super(context);
}
public EditCancel(Context context, AttributeSet attrs) {
super(context, attrs);
LayoutInflater.from(context).inflate(R.layout.custom_editview, this, true);
init();
}
private void init() {
ib = (ImageButton) findViewById(R.id.ib);
et = (EditText) findViewById(R.id.et);
et.addTextChangedListener(tw);// 为输入框绑定一个监听文字变化的监听器
// 添加按钮点击事件
ib.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
hideBtn();// 隐藏按钮
et.setText("");// 设置输入框内容为空
}
});
}
// 当输入框状态改变时,会调用相应的方法
TextWatcher tw = new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// TODO Auto-generated method stub
}
// 在文字改变后调用
@Override
public void afterTextChanged(Editable s) {
if (s.length() == 0) {
hideBtn();// 隐藏按钮
} else {
showBtn();// 显示按钮
}
}
};


@Override
public void hideBtn() {
// 设置按钮不可见
if (ib.isShown()) ib.setVisibility(View.GONE);
}
@Override
public void showBtn() {
// 设置按钮可见
if (!ib.isShown()) ib.setVisibility(View.VISIBLE);
}
}

interface EdtInterface {
public void hideBtn();
public void showBtn();
}

 

在TextWatch接口的afterTextChanged方法中对文字进行判断,若长度为0,就隐藏按钮,否则,显示按钮。

另外,实现ImageButton(即那个叉)的点击事件,删除输入框中的内容,并隐藏按钮。

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(android,layout,delete,import,interface,encoding)