您的位置:首页 > 其它

自定义控件,实现手指触摸的文字被选中。

2014-05-07 10:35 197 查看
public class CustomView extends EditText {
private int off; // 字符串的偏移值
private Context context;
private MainActivity mainActivity;

public CustomView(Context context) {
super(context);
this.context = context;
initialize();
}

private void initialize() {
setGravity(Gravity.TOP);
setBackgroundColor(Color.WHITE);
}

public CustomView(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
initialize();
}

@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:
int x = (int) event.getX();
int y = (int) event.getY();
line = layout.getLineForVertical(getScrollY() + (int) event.getY());
int curOff = layout
.getOffsetForHorizontal(line, (int) event.getX());
// 选择部分文字
Selection.setSelection(getEditableText(), off, curOff);
mainActivity = (MainActivity) context;
break;
}
return true;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: