Android Bug:Custom view * is not using the 2- or 3-argument
2016-01-21 10:15
573 查看
出现这个问题的原因是自定义控件缺少构造方法:
比如:这有三个构造方法,一开始写了一个,运行就崩溃,补全了之后就好了
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;
}
}
比如:这有三个构造方法,一开始写了一个,运行就崩溃,补全了之后就好了
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;
}
}
相关文章推荐
- Android Studio 引用自定义属性的问题
- Android开发技术点1——Fragment中EditText文字的记忆性
- 为Nexus5编译Android L固件
- Android数据库升级、降级、创建(onCreate() onUpgrade() onDowngrade())的注意点
- android java 闭包
- android中的提示信息显示方法(toast应用)
- Android手机平板两不误,使用Fragment实现兼容手机和平板的程序
- Android Studio 断点调试(debug)
- Android开发之使用ExifInterface获取拍照后的图片属性
- 源码学习 : View视图 生命周期及各方法的作用(1)
- 关于ADT和AndroidStudio集成SVN的一些小问题
- ANDROID_DAILY_OVERRIDE 错误
- Android内存泄露与内存溢出是什么,什么情况是内存泄露,什么情况是内存溢出
- android加固系列—5.加固前先学会破解,hook(钩子)jni层系统api
- android中的sqlite注意事项
- 新的一年 2016技术目标
- 最强Android模拟器genymotion的安装与配置
- Android内嵌H5页面调用手机图片操作
- Android教材 | 第三章 Android界面事件处理(一)—— 杰瑞教育原创教材试读
- Android关闭AlertDialog的方法