3

在我的 Activity 应用程序中,我想在EditText单击内部(焦点)EditText 并键入一个键清除时进行设置,该清除button 应出现在右侧EditText
当 EditText 为空时,必须删除该清除按钮。
但它没有向我展示..
我应该在这里实施哪个事件..?onTouchonFocusChangeaddTextChangedListener还有什么代码在那里..?以下代码我在活动中完成...

在活动中:

 clear = getResources().getDrawable(R.drawable.round_clear);
     clear.setBounds(0, 0, clear.getIntrinsicWidth(), clear.getIntrinsicHeight());

和事件作为

@Override
public void onFocusChange(View v, boolean hasFocus) 
{
    switch (v.getId()) 
    {
        case R.id.uIDEditText:
                if(hasFocus && !uIDEditText.getText().toString().isEmpty())
                     uIDEditText.setCompoundDrawables(null, null, clear, null);                 
                else
                     uIDEditText.setCompoundDrawables(null, null, null, null);
            break;

        case R.id.pwdEditText:
                if(hasFocus && !pwdEditText.getText().toString().isEmpty())
                    pwdEditText.setCompoundDrawables(null, null, clear, null);
                else
                    pwdEditText.setCompoundDrawables(null, null, null, null);

            break;          
    }               
}


另一个事件是:


@Override
public boolean onTouch(View v, MotionEvent event) 
{
    switch (v.getId()) 
    {
        case R.id.uIDEditText:
            final int x = (int)event.getX();
            final int y = (int)event.getY();              
            if(event.getAction() == MotionEvent.ACTION_UP && clear!=null) {
                Rect rBounds = clear.getBounds();

                int n1 = v.getRight();
                int n2 = v.getRight()+rBounds.width();
                int n3 = v.getPaddingTop();
                int n4 = v.getHeight()-v.getPaddingBottom();

                if(x>=(n1) && x<=(n2) && y>=n3 && y<=(n4))
                {
                    uIDEditText.setText("");
                    event.setAction(MotionEvent.ACTION_CANCEL);
                }
            }
    break;
       }
     }
4

2 回答 2

8

我解决了它...创建了以下代码

public class CustomEditText extends EditText {

private Drawable  dRight;
private Rect rBounds;
CustomEditText(Context context,AttributeSet attributeSet){
    super(context,attributeSet);
}
@Override
public void setCompoundDrawables(Drawable left, Drawable top,
        Drawable right, Drawable bottom) {
    /*if (left != null) {
        dLeft = left;
    }*/
    if (right != null) {
        dRight = right;
    }
    super.setCompoundDrawables(left, top, right, bottom);
}

@Override
public void addTextChangedListener(TextWatcher watcher) {       
    super.addTextChangedListener(watcher);      
}

@Override
protected void onTextChanged(CharSequence text, int start,
        int lengthBefore, int lengthAfter) {        
    super.onTextChanged(text, start, lengthBefore, lengthAfter);
    if(this.getText().toString().length()>0)
        this.setCompoundDrawablesWithIntrinsicBounds(null, null, dRight, null);
    else
        this.setCompoundDrawablesWithIntrinsicBounds(null, null, null, null);
}   
@Override
protected void finalize() throws Throwable {
    dRight = null;
    rBounds = null;
    super.finalize();
}
 }

并在xml中添加:

<com.example.screen.CustomEditText
    android:id="@+id/uIDEditText"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"       
    android:drawableRight="@drawable/round_clear"       
    android:textColor="#ffffff" />


在活动中(edittext ontouch 监听器):

 uIDEditText.setOnTouchListener(new OnTouchListener() {         
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction() != MotionEvent.ACTION_UP)                         
                return false;

            if (event.getX() > uIDEditText.getWidth()  - clear.getIntrinsicWidth()) 
            {
                uIDEditText.setText("");    
                event.setAction(MotionEvent.ACTION_CANCEL);
            }
            return false;   
        }
    });
于 2013-05-08T09:48:52.067 回答
0

你想要的就在这里。

使用 Textwatcher 功能进行编辑文本。

package com.example.editwatch;

import android.os.Bundle;
import android.app.Activity;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;

public class MainActivity extends Activity {


    EditText edittext_search;
    ImageView imageView1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        edittext_search=(EditText)findViewById(R.id.editText1);
        imageView1=(ImageView)findViewById(R.id.imageView1);

        edittext_search.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                // TODO Auto-generated method stub

                if(edittext_search.getText().length()>0)
                {
                    imageView1.setVisibility(View.VISIBLE);
                }
                else
                {
                    imageView1.setVisibility(View.GONE);
                }

            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {
                // TODO Auto-generated method stub

            }

            @Override
            public void afterTextChanged(Editable s) {
                // TODO Auto-generated method stub

            }
        });


    }

}
于 2013-05-06T11:23:39.973 回答