自定义控件:左侧有文字,右侧有文字的EditText
控件功能详解:
- 左侧文字一般为固定内容,文字大小默认16sp
- 与输入内容的间距为设置的leftTextPadding ,默认为26dp(字体默认source_han_sans_cn_regular.otf")
- 右侧文字 一般显示单位等,(字体默认roboto_medium.ttf),文字大小默认14sp
- 没有输入内容时,右侧文字距光标0dp,输入内容时,间距为设置的rightTextPadding,默认为8dp
- 底部下划线,焦点状态改变时,下划线颜色改变(downLineDefaultColor:没有焦点时的颜色,默认颜色为:#F5F5F5。downLineFocusColor:有焦点时的颜色,默认颜色为:#70A4EC)
- 同时又暴露出去左侧文字的点击事件方法,如果添加右侧图片,也有暴露的右侧图片的点击事件方法
效果图如下:
蓝色为获取焦点时的颜色,其他的为失去焦点时的颜色
OK,效果图就是这样,话不多说,上代码
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.Typeface;
import android.support.v7.widget.AppCompatEditText;
import android.text.Editable;
import android.text.InputType;
import android.text.TextPaint;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.inputmethod.InputMethodManager;
import com.minimaxhk.cmis.R;
import java.util.ArrayList;
import java.util.List;
public class LeftTextEditText extends AppCompatEditText/* implements TextWatcher */ {
private Context context;
/**
* 左侧文字
*/
private String leftText = "";
/**
* 右侧文字
*/
private String rightText = "";
/**
* 左侧文字的大小
*/
private float LeftTextSize = -1;
/**
* 右侧文字的大小
*/
private float rightTextSize = -1;
/**
* 左侧文字的颜色
*/
private int leftTextColor;
/**
* 右侧文字的颜色
*/
private int rightTextColor;
/**
* 左侧文字的字体
*/
private int leftTextFont;
/**
* 右侧文字的字体
*/
private int rightTextFont;
/**
* 底部线的默认颜色
*/
private int downLineDefaultColor;
/**
* 底部线获取焦点颜色
*/
private int downLineFocusColor;
/**
* 左侧文字的画笔
*/
private Paint leftPaint;
/**
* 右侧文字的画笔
*/
private Paint rightPaint;
/**
* 输入文字的画笔
*/
private TextPaint paint;
/**
* 底部线的画笔
*/
private Paint downLinePaint;
/**
* 光标距左侧文字的距离
*/
private float leftTextPadding;
/**
* 光标距右侧文字的距离
*/
private float rightTextPadding;
/**
* 存放字体路径
*/
private List<String> pathList;
/**
* 点击的是否是左侧文字
*/
private Boolean isSelectLeftText = false;
/**
* 点击的是否是右侧图片
*/
private Boolean isSelectRightDrawIcon = false;
public LeftTextEditText(Context context) {
this(context, null);
}
public LeftTextEditText(Context context, AttributeSet attrs) {
this(context, attrs, R.attr.editTextStyle);
this.context = context;
}
public LeftTextEditText(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
this.context = context;
init(context, attrs, defStyleAttr);
}
private void init(Context context, AttributeSet attrs, int defStyleAttr) {
paint = getPaint();
pathList = new ArrayList<>();//默认添加的几个字体样式
pathList.add(0, "fonts/source_han_sans_cn_regular.otf");
pathList.add(1, "fonts/source_han_sans_cn_medium.otf");
pathList.add(2, "fonts/roboto_medium.ttf");
pathList.add(3, "fonts/din_medium.otf");
//这部分代码时控件在布局文件中设置属性的代码
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.L