android - 在事件上向 EditText 显示复合可绘制对象

标签 android android-edittext compound-drawables

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

在 Activity 中:

 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;
       }
     }

最佳答案

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

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" />


在 Activity 中(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;   
        }
    });

关于android - 在事件上向 EditText 显示复合可绘制对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16396866/

相关文章:

android - 使用 Robolectric 检查调用的方法

android - 关闭 Android 应用程序并在那一刻执行任务

java - 不显示 EditText 的全部内容

android - 传递给另一个 Activity 的字符串的动态编辑文本

android - 具有拉伸(stretch)复合可绘制对象的固定宽度 TextView

android - 如何在 Google Fit 项目的开发者控制台上找到 Fitness API?

java - android webview 中键盘不显示

android - setCompoundDrawables 对可绘制形状无效

android - 如何在 edittext 字段中更改文本后更新 textview

android - DrawableTop 不显示可绘制对象