//触摸监听
edit01.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
//如果未输入,不监听
if (edit01.getText().length() == 0) {
return false;
}
int px;//触摸的x轴位置
switch (event.getAction()) {
case MotionEvent.ACTION_UP:
px = (int) event.getX();
int index = edit01.getOffsetForPosition(px, 0) - 1;
edit01.setSelection(index, index + 1);
//打开键盘
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
// imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
imm.showSoftInput(edit01,InputMethodManager.SHOW_FORCED);
}
return true;
}
});
补充:
1:居中或者居右,触摸到第一个字符前,
//触摸监听
edit01.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
//如果未输入,不监听
if (edit01.getText().length() == 0) {
return false;
}
int px;//触摸的x轴位置
switch (event.getAction()) {
case MotionEvent.ACTION_UP:
px = (int) event.getX();
int index = edit01.getOffsetForPosition(px, 0);
//防止越界
index = index==0?1:(index>edit01.getText().length?edit01.getText().length:index);
edit01.setSelection(index-1, index);
//打开键盘
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
// imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
imm.showSoftInput(edit01,InputMethodManager.SHOW_FORCED);
}
return true;
}
});
2:触摸获取焦距失灵
editPlate.requestFocusFromTouch();
requestFocus() 方法在三种情况下获取焦点不能生效。
1)对应的View不支持Focus;
2) 对应的View支持Focus,但是不支持在Touch模式下的Focus;
3) 对应的View其祖先View 设置了FOCUS_BLOCK_DESCENDANTS 标志, 阻止其子View获取焦点。
3:选中字符灵敏性升级
在使用过程中发现,在EditText中,点击1的位置会选择字符‘b’,点击2的位置会选择c;
推测可能是由于 edit01.getOffsetForPosition(px, 0);在判断自附的时候做了类似四舍五入的事情,
完整修改如下
edit01.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
//如果未输入,不监听
if (edit01.getText().length() == 0) {
return false;
}
int px;//触摸的x轴位置
switch (event.getAction()) {
case MotionEvent.ACTION_UP:
px = (int) event.getX()+ (int) editPlate.getTextSize() / 2; //点击位置加上字符大小的一半
int index = edit01.getOffsetForPosition(px, 0);
//防止越界
index = index==0?1:(index>edit01.getText().length?edit01.getText().length:index);
edit01.setSelection(index-1, index);
//打开键盘
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
// imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
imm.showSoftInput(edit01,InputMethodManager.SHOW_FORCED);
}
return true;
}
});
可能不会再更新了