Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android – 在事件上显示复合drawable到EditText大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
在我在Activity中的应用程序中,我想设置EditText,因为我单击里面(焦点)EditText并键入一个键清除按钮应该出现在EditText的右侧,当EditText为空时,清除按钮必须删除.但它没有显示给我..我应该在这里实现哪些事件..?onTouch或onFocusChange或addTextChangedListener以及那里的代码..?以下代码我在活动中完成了……

在活动中:

clear = getresources().getDrawable(R.drawable.round_clear);
     clear.setBounds(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);
            break;

        case R.id.pwdEditText:
                if(hasFocus && !pwdEditText.getText().toString().isEmpty())
                    pwdEditText.setCompoundDrawables(null,null);
                else
                    pwdEditText.setCompoundDrawables(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,dRight,null);
    else
        this.setCompoundDrawablesWithIntrinsicBounds(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 – 在事件上显示复合drawable到EditText全部内容,希望文章能够帮你解决android – 在事件上显示复合drawable到EditText所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。