【Androidソース解析】消去可能な入力ボックスをカスタマイズ

2166 ワード

今日皆さんにこのEdittextについて分かち合って、前に1つのキーでクリアできる入力ボックスを使ったことがあります.考えてみると、入力ボックスのそばに小さなクリア画像を置いて、Edittextとクリアした小さな画像をレイアウトに置いて、レイアウトに背景の画像をあげて、見た目もきれいで、edittextによって.getText().lengthは小さな画像が見えるかどうかを設定してもいいと思います.しかし、自分がたくさん見るにつれて、このように実現できるのは、本当に水なので、クリアできるEdittextをカスタマイズしたいと思っています.
以下に自分の考えを述べます.
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