EDITTEXT Android:需要控制光标位置(阻止或允许)



我正在开发一个应用程序,我面临以下问题:

假设我有以下表达式:计算器应用程序中的5+9x6/6+SIN(8(+TAN(78(:

因此,我试图实现的是,如果editText的当前光标刚好在TAN中的N、SIN中的N或COS中的s之后,并且考虑到用户决定删除SIN、COS或TAN,我希望一次删除整个字符串(而不需要用户逐个删除3个字符中的每一个(。

这一点,我已经设法使用以下片段实现:

int cursorPosition = editTxt.getSelectionStart();
try {
if (editTxt.getText().toString().substring(cursorPosition - 4, cursorPosition).equals("SIN") ||      ///runs if TAN, COS, or SIN were detected during deletion
editTxt.getText().toString().substring(cursorPosition - 4, cursorPosition).equals("COS") ||
editTxt.getText().toString().substring(cursorPosition - 4, cursorPosition).equals("TAN")) {
Toast.makeText(getApplicationContext(), "here", Toast.LENGTH_SHORT).show();
editTxt.setText(editTxt.getText().delete(cursorPosition - 4, cursorPosition));
editTxt.setSelection(cursorPosition - 4);
}else{
///here is the regular char delete process
editTxt.setText(editTxt.getText().delete(cursorPosition-1,cursorPosition));
editTxt.setSelection(cursorPosition-1);
}
}catch (Exception e){
editTxt.setText(editTxt.getText().delete(cursorPosition-1,cursorPosition));
editTxt.setSelection(cursorPosition-1);
}

但这里的问题是:如果用户决定删除";T";从TAN,那么我需要找到一种方法,删除其余的";AN";,换句话说,我想删除整个字符串";TAN";如果用户试图删除其任何字符,SIN和COS也是如此。

附件是一个简短的GIF,展示了我正在努力实现的目标(取自谷歌计算器(。(基本上,我想防止用户将光标放置在"TAN"、谷歌计算器"COS"one_answers"SIN"之间的任何位置

对于遇到相同场景的任何人,下面是我自己的简单解决方法:

if(selEnd != this.getText().length()){
String nextCharacter=this.getText().toString().substring(selStart,selStart+1);
try {
switch (nextCharacter) {
case "A":
case "O":
case "I":
MainActivity.currentPosition = selEnd + 3;
this.setSelection(MainActivity.currentPosition);
break;
case "N":
MainActivity.currentPosition = selEnd + 2;
this.setSelection(MainActivity.currentPosition);
break;
case "S":
if (this.getText().toString().charAt(selStart + 1) != 'I') {
MainActivity.currentPosition = selEnd + 2;
this.setSelection(MainActivity.currentPosition);
break;
}
}
}catch(Exception e){
}
}

最新更新