博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
编写clearedit的安卓控件
阅读量:4598 次
发布时间:2019-06-09

本文共 3258 字,大约阅读时间需要 10 分钟。

1.写一个自定义的控件

public class ClearEditText extends AppCompatEditText implements        View.OnFocusChangeListener, TextWatcher {    public Drawable mClearDrawable;    private boolean hasFocus;    private static final String TAG = "ClearEditText";        public ClearEditText(Context context, AttributeSet attrs) {        super(context, attrs);        init();    }    public void init(){        //右侧清除按钮的图片资源        mClearDrawable = getCompoundDrawables()[2];        if(mClearDrawable==null){            mClearDrawable = getResources().getDrawable(R.drawable.i_delete);        }        mClearDrawable.setBounds(0,0,mClearDrawable.getIntrinsicWidth(), mClearDrawable.getIntrinsicHeight());        //设置清除按钮隐藏        setClearIconVisble(false);        //设置焦点改变的监听        setOnFocusChangeListener(this);        //设置输入框里面内容发生改变的监听        addTextChangedListener(this);    }    //设置焦点改变的监听    @Override    public boolean onTouchEvent(MotionEvent event) {        if(event.getAction()== MotionEvent.ACTION_UP){            if(getCompoundDrawables()[2]!=null){                Boolean touchable = event.getX()>(getWidth()-getTotalPaddingRight()) && (event.getX() < ((getWidth() - getPaddingRight())));                if(touchable){                    this.setText("");                }            }        }        return super.onTouchEvent(event);    }    /*    *  设置清除按钮的样式    * */    private void setClearIconVisble(Boolean visible){        Drawable right =visible ?mClearDrawable :null;        setCompoundDrawables(getCompoundDrawables()[0],getCompoundDrawables()[1],right,getCompoundDrawables()[3]);    }    /*    * 判断是否显示清除标签的方法    * */    private void showClearIcon(){           if(hasFocus && getText().length()>0){            setClearIconVisble(true);        }else{            setClearIconVisble(false);        }    }    @Override    public void onFocusChange(View view, boolean b) {        hasFocus=b;        showClearIcon();    }    @Override    public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {    }    @Override    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {        showClearIcon();    }    @Override    public void afterTextChanged(Editable editable) {    }}

2.在布局文件中使用它

3.在activity里面写点击回车的执行逻辑

public class MainActivity extends AppCompatActivity implements View.OnKeyListener {    private ClearEditText clearEditText;    private String txt;    private static final String TAG = "MainActivity";    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        clearEditText =findViewById(R.id.clearedit);        clearEditText.setOnKeyListener(this);    }    @Override    public boolean onKey(View view, int i, KeyEvent keyEvent) {        //这里要做下keyEvent.getAction()==KeyEvent.ACTION_UP,防止执行2次一样的操作        if(i==keyEvent.KEYCODE_ENTER && keyEvent.getAction()==KeyEvent.ACTION_UP){            txt=clearEditText.getText().toString().trim();            if(!TextUtils.isEmpty(txt)){                //点击后的具体逻辑写在这里                Log.d(TAG, "onKey: "+txt);            }        }        return false;    }}

4.完成

有个问题,不知道为什么不能设置drawright的图片,只能用默认的删除图片

转载于:https://www.cnblogs.com/norm/p/8250406.html

你可能感兴趣的文章
如何在Google Map中处理大量标记(ASP.NET)(转)
查看>>
Sublime Text 3中使用正则表达式删除空行
查看>>
UIApplicationDelegate协议
查看>>
再谈iOS 7的手势滑动返回功能
查看>>
Jmeter测试dubbo接口填坑
查看>>
python小练——找出指定目录下小于指定字节的文件,输出到文本文件
查看>>
渐渐磨砺--16年11月封闭总结
查看>>
[zz]GDB调试精粹及使用实例
查看>>
数据库的创建和删除
查看>>
【消息队列MQ】各类MQ比较
查看>>
最简单的三层实例【插入据
查看>>
设计模式学习笔记——Prototype原型模式
查看>>
pom.xml里有红叉报错的解决办法
查看>>
Perl last和next的用法区别
查看>>
Selenium 管理 Cookies
查看>>
ZOJ 1204 一个集合能组成多少个等式
查看>>
exceptionfunction[LeetCode]Permutations
查看>>
开始学习iOS开发
查看>>
从int 3探索Windows应用程序调试原理
查看>>
Java传参都是传引用变量的副本
查看>>