自定义EditText的两种方法
来源:互联网 发布:长效避孕药 知乎 编辑:程序博客网 时间:2024/06/05 20:13
自定义EditText的两种方法
方法一:
来源:http://blog.csdn.net/ff20081528/article/details/17121911
public class MyEditText extends EditText {
Drawable img;
Context mcontext;
public MyEditText(Context context, AttributeSet attrs) { super(context, attrs); mcontext = context; setBackgroundResource(R.drawable.et_background); setTextColor(getResources().getColor(R.color.font_black)); setTextSize(16); img = mcontext.getResources().getDrawable(R.drawable.item_delete_icon); 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) { if (s.length() > 0) { setCompoundDrawablesWithIntrinsicBounds(null, null, img, null);//设置删除图片 } else { setCompoundDrawablesWithIntrinsicBounds(null, null, null, null); } } }); try {//设置光标颜色 Field f = TextView.class.getDeclaredField("mCursorDrawableRes"); f.setAccessible(true); f.set((TextView) this, R.drawable.color_cursor); }catch (Exception e){ }}// 处理删除事件@Overridepublic boolean onTouchEvent(MotionEvent event) { if (img != null && event.getAction() == MotionEvent.ACTION_UP) { //获取点击事件产生的X,Y值 int eventX = (int) event.getRawX(); int eventY = (int) event.getRawY(); Log.e(String.valueOf(mcontext), "eventX = " + eventX + "; eventY = " + eventY); Rect rect = new Rect();// 定义一个矩形 getGlobalVisibleRect(rect); rect.left = rect.right - 50; if(rect.contains(eventX, eventY))//判断点击的X,Y是否在矩形内 setText(""); } return super.onTouchEvent(event);}public MyEditText(Context context) { super(context);}
}
方法二:
因为方法一是根据点击事件的X、Y值来定位删除事件的产生的,在运用到自定义对话框的时候位置就有点问题,经过调整感觉还是差那么一点。所以觉得编写另外一种方法来实现。
实现代码
public class mMyEditText extends LinearLayout {
private ImageView img;
private Context mcontext;
private EditText et;
private String hinttext;
public mMyEditText(Context context, AttributeSet attrs) { super(context, attrs); mcontext = context; TypedArray type = context.obtainStyledAttributes(attrs, R.styleable.myEdittext); hinttext = type.getString(R.styleable.myEdittext_hint); LayoutInflater inflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); inflater.inflate(R.layout.view_myedittext, this); et = (EditText) findViewById(R.id.et_my); img = (ImageView) findViewById(R.id.img_my); et.setHint(hinttext); DebugLog.e(hinttext); et.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) { if (s.length() > 0) { img.setVisibility(VISIBLE); } else { img.setVisibility(GONE); } } }); et.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { et.setText(""); img.setVisibility(GONE); } });}public mMyEditText(Context context) { super(context);}public String getText(){ return et.getText().toString().trim();}
}
布局
添加新属性
因为这种方法是通过LinearLayout 来实现的,但是真正应用的时候,LinearLayout 没有hint属性,这时候就要添加属性了
在values目录下新建一个atts文件
应用
0 0
- 自定义EditText的两种方法
- Android EditText显示图片的两种方法
- 【Android】用solo填写EditText的两种方法
- Android设置EditText输入字数限制的两种方法!
- 两种使用自定义UITableViewCell的方法
- Qt自定义控件的两种方法
- Android-自定义控件的两种方法
- 自定义导航的两种方法
- MUI自定义事件的两种方法
- angularJS自定义服务的两种方法
- Android-EditText两种方法限制输入两位小数
- Android开发中,防止EditText弹出键盘后顶起布局的两种方法
- 两种自定义消息的发送与接收的方法
- cocos2d-js的自定义事件的两种创建方法
- cocos2d-js的自定义事件的两种创建方法
- EditText字符个数限制如何操作 两种方法
- ASP自定义控件的两种实现方法
- ASP自定义控件的两种实现方法
- 向量的点乘和叉乘
- Android 之窗口小部件高级篇--App Widget 之 RemoteViews
- Protocol Buffer技术详解(语言规范)
- 2016SDAU课程练习一 1012
- 常见视频文件的编码方式和封装格式
- 自定义EditText的两种方法
- static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
- 常用hql
- JAVA中length、length()、size()的区别
- SpringMVC系列核心:处理请求流程
- 强大的数据库操作类DBHelper
- HDU 1875 畅通工程再续(MST)
- UVA 753 (最大流)
- Oracle Linux 6.5 安装Oracle 11G 配置