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. 记一次MD5妙用

    记一次MD5妙用 最近项目组中在做历史记录的改造工作,主持讨论了多次,但每次讨论完都觉的很完美了,但实际在写这部分逻辑的时候还是会发现一些问题出来,很难受,反反复复的暴露智商是硬伤,人艰不拆,暂先不扯 ...

  2. 前端面试题目汇总摘录(JS 基础篇 —— 2018.11.02更新)

    温故而知新,保持空杯心态 JS 基础 JavaScript 的 typeof 返回那些数据类型 object number function boolean undefined string type ...

  3. Vue 去脚手架插件,自动加载vue文件

    接上回 一些本质 本质上,去脚手架也好,读取vue文件也好,无非是维护options,每个Vue对象的初始化配置对象不触及Vue内部而言,在外部想怎么改都是可以的,只要保证options的正确,一切都 ...

  4. SPOJ SUBLEX

    SUBLEX - Lexicographical Substring Search 链接 题意 求第k小的子串.相同的算一个. 分析 建立后缀自动机,在后缀自动机上从一个点经过trans,到另一个点, ...

  5. sshd 防止暴力破解

  6. nginx error_page

    1. error_page语法 语法: error_page code [ code... ] [ = | =answer-code ] uri | @named_location 默认值: no 使 ...

  7. js学习日记-隐式转换相关的坑及知识

    隐式转换比较是js中绕不过去的坎,就算有几年经验的工程师也很有可能对这块知识不够熟悉.就算你知道使用===比较从而避免踩坑,但是团队其它成员不一定知道有这样或那样的坑,有后端语言经验的人常常会形成一个 ...

  8. 「暑期训练」「基础DP」 Piggy-Bank (HDU-1114)

    题意与分析 完全背包问题. 算法背包九讲里面都有提到过,我自己再说下对完全背包的理解. 为什么01背包中遍历状态从VV到00?考虑一下基本方程$dp[i][j]=max(dp[i-1][j-w[i]] ...

  9. 「暑期训练」「Brute Force」 Optimal Point on a Line (Educational Codeforces Round 16, B)

    题意 You are given n points on a line with their coordinates $x_i$. Find the point x so the sum of dis ...

  10. Ubuntu下使用Git_2

    接着上一篇的写,这里练习一下git clone 指令 指令格式 $ git clone <repository> <directory> <respository> ...