【Androidソース解析】消去可能な入力ボックスをカスタマイズ
今日皆さんにこのEdittextについて分かち合って、前に1つのキーでクリアできる入力ボックスを使ったことがあります.考えてみると、入力ボックスのそばに小さなクリア画像を置いて、Edittextとクリアした小さな画像をレイアウトに置いて、レイアウトに背景の画像をあげて、見た目もきれいで、edittextによって.getText().lengthは小さな画像が見えるかどうかを設定してもいいと思います.しかし、自分がたくさん見るにつれて、このように実現できるのは、本当に水なので、クリアできるEdittextをカスタマイズしたいと思っています.
以下に自分の考えを述べます.
1.まずカスタムコンポーネント継承edittext
2.構造方法を書き換え、クリアボタンの小さなアイコンを初期化し、その位置を設定する
3.edittextの焦点変化を傍受し、焦点変化に応じて小さなアイコンを隠す
4.小さなアイコンを書き換えるボタンクリックイベント
一部のコードを貼り付けます.
xmlで直接このコントロールを参照すればOKです
githubアドレス:
https://github.com/Hankkin/ClearEditTextDemo.git
ソースアドレス:
http://download.csdn.net/detail/lyhhj/8991711
以下に自分の考えを述べます.
1.まずカスタムコンポーネント継承edittext
2.構造方法を書き換え、クリアボタンの小さなアイコンを初期化し、その位置を設定する
3.edittextの焦点変化を傍受し、焦点変化に応じて小さなアイコンを隠す
4.小さなアイコンを書き換えるボタンクリックイベント
一部のコードを貼り付けます.
/**
* edittext , :
* ( - - ) ( - )
* ,
* by Hankkin at:2015 8 11 16:45:42
* @param event
* @return
*/
@Override
public boolean onTouchEvent(MotionEvent event) {
if (getCompoundDrawables()[2]!=null){
if (event.getAction() == MotionEvent.ACTION_UP){
boolean touchable = event.getX()>(getWidth()-getPaddingRight()-deleteDraw.getIntrinsicWidth())&&
(event.getX() < ((getWidth() - getPaddingRight())));
if (touchable){
setText("");
}
}
}
return super.onTouchEvent(event);
}
/**
*
* by Hankkin at:2015 8 11 16:17:24
* @param isVisible
*/
private void setDeleteVisible(boolean isVisible){
Drawable drawable = isVisible?deleteDraw:null;
setCompoundDrawables(getCompoundDrawables()[0],getCompoundDrawables()[1],drawable,getCompoundDrawables()[3]);
}
/**
* edittext , 0, ,
* by Hankkin at:2015 8 11 16:32:47
* @param v
* @param hasFocus
*/
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus){
setDeleteVisible(getText().length()>0);
}else {
setDeleteVisible(false);
}
}
xmlで直接このコントロールを参照すればOKです
githubアドレス:
https://github.com/Hankkin/ClearEditTextDemo.git
ソースアドレス:
http://download.csdn.net/detail/lyhhj/8991711