android 移除自己view,Android自定义View-带删除和搜索图标的EditText
效果图:
这里写图片描述
直接撸代码:
public class SearchEditText extends EditText {
private static final String TAG = "SearchEditText";
private Drawable searchImg, delImg;
public SearchEditText(Context context) {
super(context);
init();
}
public SearchEditText(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public SearchEditText(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public SearchEditText(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
init();
}
private void init() {
int pxDimension = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 16,
getContext().getResources().getDisplayMetrics());
setPadding(pxDimension, 0, pxDimension, 0);
searchImg = getContext().getResources().getDrawable(R.drawable.ic_search_red_500_24dp);
delImg = getContext().getResources().getDrawable(R.drawable.ic_delete_forever_red_500_24dp);
addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
setDrawables();//内容变换后
}
});
setDrawables();
}
private void setDrawables() {
if (length() < 1) {
setCompoundDrawablesWithIntrinsicBounds(searchImg, null, null, null);
} else {
setCompoundDrawablesWithIntrinsicBounds(searchImg, null, delImg, null);
Drawable[] compoundDrawables = getCompoundDrawables();
// 0 ,1 ,2, 3对应左,上,右,下
//如果图片小可以拉伸下,代码如下
// Rect bounds = compoundDrawables[2].getBounds();
// int size = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 2,
// getContext().getResources().getDisplayMetrics());
// compoundDrawables[2].setBounds(bounds.left, bounds.top, bounds.right + size, bounds.bottom + size);
// setCompoundDrawables(compoundDrawables[0], compoundDrawables[1], compoundDrawables[2], compoundDrawables[3]);
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
Drawable[] compoundDrawables = getCompoundDrawables();
if (compoundDrawables[2] != null && event.getAction() == MotionEvent.ACTION_UP) {
int eventX = (int) event.getRawX();
int eventY = (int) event.getRawY();
Rect rect = new Rect();
getGlobalVisibleRect(rect);
rect.left = rect.right - 100;
if (rect.contains(eventX, eventY)) {
setText("");
}
}
return super.onTouchEvent(event);
}
}
布局文件就不贴上了,用到的图片资源也贴上,有需要的可以下载试试
这里写图片描述
这里写图片描述
这里写图片描述
android 移除自己view,Android自定义View-带删除和搜索图标的EditText相关推荐
- Android仿IOS解锁密码界面-自定义view系列(6)
Android仿IOS解锁密码界面-自定义view系列 功能简介 主要实现步骤-具体内容看github项目里的代码 xml相关属性设置 Android Studio 代码 Android技术生活交流 ...
- Android安卓仿IOS音量调节-自定义view系列(4)
Android安卓仿IOS音量调节-自定义view系列 功能简介 主要实现步骤 xml相关属性设置 java代码 Android技术生活交流 更多其他页面-自定义View-实用功能合集:点击查看 Gi ...
- Android开发之制作圆形头像自定义View,直接引用工具类,加快开发速度。带有源代码学习
作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 QQ986945193 博客园主页:http://www.cnblogs.com/mcxiaobing ...
- Android开发之制作圆形头像自定义View,直接引用工具类,加快开发速度。带有源代码学习...
作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 QQ986945193 博客园主页:http://www.cnblogs.com/mcxiaobing ...
- Android绘图机制(三)——自定义View的实现方式以及半弧圆新控件
Android绘图机制(三)--自定义View的三种实现方式以及实战项目操作 在Android绘图机制(一)--自定义View的基础属性和方法 里说过,实现自定义View有三种方式,分别是 1.对现有 ...
- Android绘图机制(二)——自定义View绘制形, 圆形, 三角形, 扇形, 椭圆, 曲线,文字和图片的坐标讲解
Android绘图机制(二)--自定义View绘制形, 圆形, 三角形, 扇形, 椭圆, 曲线,文字和图片的坐标讲解 我们要想画好一些炫酷的View,首先我们得知道怎么去画一些基础的图案,比如矩形,圆 ...
- android app自动更新界面_Android自定义view之模仿登录界面文本输入框(华为云APP)...
好久不见!!!!!,最近终于挤出时间来更新文章了,废话不多说,直接开始. 效果图如下: 01 分析 1.组合多个控件完成此输入框静态效果 2.hint值上浮下潜动画 3.一些功能 02 步骤 01 自 ...
- android 在xml文件中引用自定义View
在xml中引用自定义view 方法一: [java] view plaincopy <com.test.copytext.CopyText android:layout_width=" ...
- android 清空canvas部分内容_Android自定义View实现圆形头像效果
在我们的APP中通常会遇到,展示圆形头像的需求,一般通过Glide就能实现,但是让我们做一个圆形头像,如果让我们自定义实现这种效果,该怎样做呢? 好,接下来本文通过三种方式来实现这种效果! 注意:这是 ...
最新文章
- 中服公司企业信息化的ERP系统选择
- 计算机视觉的优点和局限性
- 一个典型的后台软件系统的设计复盘——(二)如何id一个事物
- 【scala】类的定义和单例对象
- Linux自动删除n天前日志
- 二进制除法\模2除法
- 通过OleDB连接方式,访问Access,Excel数据库.
- libco协程库上下文切换原理详解
- Openvswitch手册(7): Interfaces
- Pytorch实现FGSM(Fast Gradient Sign Attack)
- sublime添加到右键的注册表文件
- HTML5+css+JS实现LOL官网动态页面DW、vscode页眉加轮播图
- Typora 语法结构与功能
- 复杂网络的任意子节点的网络最短距离
- 测试学习--云测试平台
- 两种web crawler方案
- 【壁纸】kali linux 2021.1 自带原版壁纸分享
- 有人说程序员是一个很高大上又高不可攀的职业,你认同吗?
- R语言绘图—快速绘制Lollipop图
- windows7 热键查看_创建快捷方式或热键以在Windows 7或Vista中打开任务管理器的“所有用户”视图...
热门文章
- Flask 重复启动
- shell下function报错
- Juniper EX3400堆叠配置 + 链路捆绑配置
- 微信在诺基亚手机登录服务器繁忙,马化腾正式宣布:禁止在该手机上登录QQ和微信?网友:诺基亚再见...
- error aborting mysql,mysql错误1067,mysql1067错误aborting
- java stack empty_java.util.Stack.empty()方法实例
- 王者荣耀服务器维护5月22,5月22日王者荣耀更新内容一览
- linux卸载dev中的设备,Linux /dev 常见特殊设备介绍与应用
- js滚动条下拉一定值_JS逆向 | *APD模拟登录(AES)
- oracle 中 to_date 函数的用法