出现这个问题的原因是自定义控件缺少构造方法:
比如:这有三个构造方法,一开始写了一个,运行就崩溃,补全了之后就好了
public class TextCopy extends EditText {
private int off; //字符串的偏移值
// 构造方法1
public TextCopy(Context context) {
super(context);
initialize();
}
// 构造方法2
public TextCopy(Context context, AttributeSet attrs) {
super(context, attrs);
initialize();
}
// 构造方法3
public TextCopy(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initialize();
}
private void initialize() {
setGravity(Gravity.TOP);
setBackgroundColor(Color.WHITE);
}
@Override
protected void onCreateContextMenu(ContextMenu menu) {
//不做任何处理,为了阻止长按的时候弹出上下文菜单
}
@Override
public boolean getDefaultEditable() {
return false;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
int action = event.getAction();
Layout layout = getLayout();
int line = 0;
switch (action) {
case MotionEvent.ACTION_DOWN:
line = layout.getLineForVertical(getScrollY() + (int) event.getY());
off = layout.getOffsetForHorizontal(line, (int) event.getX());
Selection.setSelection(getEditableText(), off);
break;
case MotionEvent.ACTION_MOVE:
case MotionEvent.ACTION_UP:
line = layout.getLineForVertical(getScrollY() + (int) event.getY());
int curOff = layout.getOffsetForHorizontal(line, (int) event.getX());
Selection.setSelection(getEditableText(), off, curOff);
break;
}
return true;
}
}