编写clearedit的安卓控件
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的安卓控件的更多相关文章
- 关于VCL的编写 (一) 如何编写自己的VCL控件
如何编写自己的VCL控件 用过Delphi的朋友们,大概对Delphi的最喜欢Delphi的不是他的强类型的pascal语法,而是强大的VCL控件,本人就是一位VCL控件的爱好者. VCL控件的开源, ...
- 安卓控件RecycleView的简单使用
RecycleView的使用 目录 RecycleView的使用 技术概述 技术详述 遇到问题和解决 总结 参考文献 技术概述 RecycleView是谷歌官方对ListView的改进(并不是替代), ...
- 安卓控件 仪表盘控件 柱状图控件 曲线控件 xamarin.android 分类器 瓶子控件 报警控件 水箱控件 进度条控件等
本篇博客主要介绍一个控件库,HslControls.dll 的界面,这个控件库支持winform,winform的参考另一篇文章:https://www.cnblogs.com/dathlin/p/1 ...
- 安卓控件获取器uiautomatorviewer初体验:"unable to connect to the adb. check if adb is installed correctly"
解决方法:转自:https://plus.google.com/108487870030743970488/posts/2TrMqs1ZGQv Challenge Accepted:1. Screen ...
- 梦想CAD控件安卓控件事件
MxDrawActivity.commandEvent 命令调用事件. 参数 说明 int iCommand 命令ID,这个ID用户自已来取的,只要多个命令ID不重复就可以 代码实现如下: publi ...
- 安卓控件支持HTML标签
http://www.cnblogs.com/xqxacm/p/5092557.html
- Android 轮换控件
首先是控件轮换 一.创建主布局 1.用到的控件是 TextSwitcher (文本轮换) 那么其他对应的也就是 ImageSwitcher (图片轮换) <LinearLayout xmlns: ...
- 第二十九篇:使用SOUI的SMCListView控件
列表控件是客户端应用最常用的控件之一.列表控件通常只负责显示数据,最多通知一下APP列表行的选中状态变化. 现在的UI经常要求程序猿在列表控件里不光显示内容,还要能和用户交互,显示动画等等,传统的列表 ...
- Android基本控件之GridView
我们在使用手机的过程中,会看到一些图片配上文字的一些情况,今天我们就来介绍一下安卓控件的GridView GridView组件用来以网格方式排列视图,与矩阵类似,当屏幕上有很多元素(文字.图片或其他元 ...
随机推荐
- poj_2339
参考:https://blog.csdn.net/yzl_rex/article/details/7600906 https://blog.csdn.net/acm_JL/article/detail ...
- Ubuntu14.04安装opencv2.4.13
本文参考相关链接:http://blog.csdn.net/honyniu/article/details/46390097 系 统:Ubuntu 14.04 x64 opencv版本:2.4.1 ...
- CSS3新特性回顾
CSS3 介绍 开始实例 新特征简介 强大的CSS选择器 抛弃图片的视觉效果 盒模型变化(多列布局和弹性盒模型) 阴影效果 Web字体和web Font 图标 CSS33过渡与动画交互效果 媒体查询 ...
- Oracle错误记录
1 SQLPlus无法登陆oracle,PLSql可以登陆,报错ORA-12560 环境变量 右击计算机属性-->高级系统设置-->高级-->环境变量-->系统变量--> ...
- set<pair<int,int> > 的运用
In this cafeteria, the N tables are all ordered in one line, where table number 1 is the closest to ...
- Linux下创建pycharm的快捷方式
第一步:创建桌面快捷方式文件Pycharm.desktop,并打开 sudo gedit /usr/share/applications/Pycharm.desktop 第二步:在打开的文件Pycha ...
- 系统学习Docker 践行DevOps理念
Docker代表的容器技术是近两年的大热技术,和人工智能.区块链等热点不同,容器技术的门槛并不高,每一个开发.测试.运维人员都能在日常工作中掌握和使用,是当今IT从业人员的必备技能之一.本课程会带大家 ...
- redux使用过程中遇到的两个致命的关键点
一.在reducer中,返回的state必须是全新的对象,否则,redux不会执行listening方法,因为redux会认为state没有更新过,没必要重新渲染view. 出现问题的例子: cons ...
- 【java并发编程】十三章:显式锁:LOCK
java5以后,新增了显式锁,用于当内置锁不能满足需求后可选择的一种高级方案. lock接口的特点 与内置锁一样,他能提供互斥性,内存可见性,可重入等特征,与内置锁不同的是,Lock提供了一种无条件, ...
- js中DOM 节点的一些操作方法
什么是DOM DOM:文档对象模型.DOM 为文档提供了结构化表示,并定义了如何通过脚本来访问文档结构.目的其实就是为了能让js操作html元素而制定的一个规范. DOM就是由节点组成的. 解析过程 ...