カスタムコントロール-削除ボタン付き入力ボックス


削除ボタン付きの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というインタフェースを用いて,入力ボックスの文字の変化を傍受する.使用も簡単で、彼の3つの方法を実現すればいい.コードを見てください:
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)findView ByyId(R.id.ib);et=(EditText) findView ByyId(R.id.et);et.addTextTextChangedListener(tw);//////////////////////////////////////////////////////////@ボタンクリックイベントib.setOnClickListener(new OnClickListener()@Override public void onClick(Viewv){hideBtn(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@Overriride呼び出し@Overririr r r de 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のクリックイベントを実現し、入力ボックスの内容を削除し、ボタンを非表示にします.