本文实例为大家分享了Android自定义控件EditText的具体代码,供大家参考,具体内容如下
自定义控件分三种:
1. 自绘控件
2. 组合控件
3. 继承控件
代码已上传到 github
以后的自定义控件就都放这个仓库
需求
这里由于项目的需要实现一个自定义EditText,主要实现的为两点,一个是工具图标toolIcon,例如点击清除EditText内容。一个为EditText左边的提示图标hintIcon, 例如输入账号密码时前面的图标。
为了让这个控件的拓展性更高,设置了两个点击事件接口。对于toolIcon来说,默认点击事件为清除EditText内容,如果需要更改,在代码中设设置相关的点击事件即可。
步骤
继承EditText
编写attrs.xml, 创建declare-styleable
编写MyEditText
布局中使用
实现
获取布局文件中设置的属性
这里返回的是一个TypedArray数组,获取之后就可以获得布局文件中设置的属性了
private void init(Context context, AttributeSet attrs) {
TypedArray typedArray = context.getTheme().obtainStyledAttributes(
attrs,
R.styleable.MyEditText,
0, 0);
hintIcon = typedArray.getDrawable(R.styleable.MyEditText_hintIcon);
toolIcon = typedArray.getDrawable(R.styleable.MyEditText_toolIcon);
fixed = typedArray.getBoolean(R.styleable.MyEditText_fixed, true);
if (toolIcon != null && fixed) {
setHeight(toolIcon.getIntrinsicHeight());
}
setCompoundDrawablesWithIntrinsicBounds(hintIcon, null, null, null);
setCompoundDrawablePadding(10);
typedArray.recycle();
onClickListenerWithEditTextToolIcon = new OnClickListenerWithEditTextToolIcon() {
@Override
public void onClick() {
setText("");
}
};
}
设置资源图片
EditText是继承自TextView,在TextView中存在两个方法
setCompoundDrawablesWithIntrinsicBounds(left, top, right, bottom)
setCompoundDrawables(left, top, right, bottom)
是设置资源图片的位置