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()[]; if(mClearDrawable==null){
mClearDrawable = getResources().getDrawable(R.drawable.i_delete);
} mClearDrawable.setBounds(,,mClearDrawable.getIntrinsicWidth(), mClearDrawable.getIntrinsicHeight()); //设置清除按钮隐藏
setClearIconVisble(false);
//设置焦点改变的监听
setOnFocusChangeListener(this);
//设置输入框里面内容发生改变的监听
addTextChangedListener(this);
}
//设置焦点改变的监听 @Override
public boolean onTouchEvent(MotionEvent event) { if(event.getAction()== MotionEvent.ACTION_UP){
if(getCompoundDrawables()[]!=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()[],getCompoundDrawables()[],right,getCompoundDrawables()[]);
} /*
* 判断是否显示清除标签的方法
* */
private void showClearIcon(){ if(hasFocus && getText().length()>){ 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.在布局文件中使用它

 <com.lingdangmao.demo_zidingyi_textview.ClearEditText
android:id="@+id/clearedit"
android:background="@drawable/rounded_edittext"
android:drawablePadding="8dp"
android:singleLine="true"
android:drawableLeft="@drawable/search"
android:drawableRight="@drawable/i_delete"
android:hint="请输入要搜索的商品"
android:imeOptions="actionSearch"
android:layout_width="match_parent"
android:layout_height="45dp" />

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的图片,只能用默认的删除图片

编写clearedit的安卓控件的更多相关文章

  1. 关于VCL的编写 (一) 如何编写自己的VCL控件

    如何编写自己的VCL控件 用过Delphi的朋友们,大概对Delphi的最喜欢Delphi的不是他的强类型的pascal语法,而是强大的VCL控件,本人就是一位VCL控件的爱好者. VCL控件的开源, ...

  2. 安卓控件RecycleView的简单使用

    RecycleView的使用 目录 RecycleView的使用 技术概述 技术详述 遇到问题和解决 总结 参考文献 技术概述 RecycleView是谷歌官方对ListView的改进(并不是替代), ...

  3. 安卓控件 仪表盘控件 柱状图控件 曲线控件 xamarin.android 分类器 瓶子控件 报警控件 水箱控件 进度条控件等

    本篇博客主要介绍一个控件库,HslControls.dll 的界面,这个控件库支持winform,winform的参考另一篇文章:https://www.cnblogs.com/dathlin/p/1 ...

  4. 安卓控件获取器uiautomatorviewer初体验:"unable to connect to the adb. check if adb is installed correctly"

    解决方法:转自:https://plus.google.com/108487870030743970488/posts/2TrMqs1ZGQv Challenge Accepted:1. Screen ...

  5. 梦想CAD控件安卓控件事件

    MxDrawActivity.commandEvent 命令调用事件. 参数 说明 int iCommand 命令ID,这个ID用户自已来取的,只要多个命令ID不重复就可以 代码实现如下: publi ...

  6. 安卓控件支持HTML标签

    http://www.cnblogs.com/xqxacm/p/5092557.html

  7. Android 轮换控件

    首先是控件轮换 一.创建主布局 1.用到的控件是 TextSwitcher (文本轮换) 那么其他对应的也就是 ImageSwitcher (图片轮换) <LinearLayout xmlns: ...

  8. 第二十九篇:使用SOUI的SMCListView控件

    列表控件是客户端应用最常用的控件之一.列表控件通常只负责显示数据,最多通知一下APP列表行的选中状态变化. 现在的UI经常要求程序猿在列表控件里不光显示内容,还要能和用户交互,显示动画等等,传统的列表 ...

  9. Android基本控件之GridView

    我们在使用手机的过程中,会看到一些图片配上文字的一些情况,今天我们就来介绍一下安卓控件的GridView GridView组件用来以网格方式排列视图,与矩阵类似,当屏幕上有很多元素(文字.图片或其他元 ...

随机推荐

  1. 【JDBC】一、JDBC连接数据库

    package com.jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLExce ...

  2. 静态栈抽象数据类型stack实现

    #include<stdio.h> #include<stdbool.h> #include<stdlib.h> #define MAX_STACK_SIZE 10 ...

  3. 【NOIP-2017PJ】图书管理员

    图书管理员 题目描述 图书馆中每本书都有一个图书编码,可以用于快速检索图书,这个图书编码是一个 正整数. 每位借书的读者手中有一个需求码,这个需求码也是一个正整数.如果一本书的图 书编码恰好以读者的需 ...

  4. iOS开发中常见的一些异常

    iOS开发中常见的异常包括以下几种NSInvalidArgumentExceptionNSRangeExceptionNSGenericExceptionNSInternallnconsistency ...

  5. abo dto属性验证的坑

    问题回现: public class ShipmentRequestDto { public string FromPhoneNumber { get; set; } /// <summary& ...

  6. ExtJs4.1目录结构介绍和使用说明[转]

    一.在做ExtJs开发之前首先要到网站上下载ExtJs的开发包,我用的最新版本是4.1.1.此版本相对于之前的版本目录结构发生了一些变化,没有了adapter目录, 目录结构如下 文件/文件夹名的作用 ...

  7. 【廖雪峰老师python教程】——模块

    使用模块 任何模块代码的第一个字符串都被视为模块的文档注释: 使用__author__变量把作者写进去,这样当你公开源代码后别人就可以瞻仰你的大名: 当我们在命令行运行模块文件时,Python解释器把 ...

  8. extjs/js时间校验

    //时间秒判断var re=/^(?:19|20)[0-9][0-9]-(?:(?:0[1-9])|(?:1[0-2]))-(?:(?:[0-2][1-9])|(?:[1-3][0-1])) (?:( ...

  9. Django源码分析之执行入口

    魔法门 一般我们启动django,最简单的方法是进入project 目录,这时目录结构是这样的 然后我们执行python manage.py runserver,程序就开始执行了. 那django是如 ...

  10. Linux服务架设篇--ping命令

    工作原理: 向远程机发送包含一定字节数的ICMP数据包,如果能收到对方的回复的数据包,就表明网络是相通的,而且根据两个数据包的时间差,还可以知道相互之间网络链接的速度. 注意: 有些远程主机由于某种原 ...