我有一个EditText,我想为用户显示光标信息。 但是我无法在用户正在编辑的行上获得光标位置。 对于前。
`The quick b|rown fox...` - Cursor @ line 0, symbol 13
`StackOverflow rule|s!` - Cursor @ line 1, symbol 20
我怎么能这样做?
请原谅我的英语。
答案 0 :(得分:0)
您可以使用getSelectionStart()和getSelectionEnd()方法获取Cursor位置。如果没有突出显示文本,则getSelectionStart()和getSelectionEnd()都将返回游标的位置。 例如:
myEditText.getSelectionStart();
或
myEditText.getSelectionEnd();
获取行号
使用:
public int getCurrentCursorLine(EditText editText)
{
int selectionStart = Selection.getSelectionStart(editText.getText());
Layout layout = editText.getLayout();
if (!(selectionStart == -1)) {
return layout.getLineForOffset(selectionStart);
}
return -1;
}
答案 1 :(得分:0)
问题很久以前。但我想帮助到达这里的人们。以下是我研究java.util.regex.Matcher
API后得到的结果。祝你好运。
下面的方法将ALL行中的charater index转换为SINGLE行中的charater index。
所以你可以在android编程中使用它,比如getInLineOffsetFromStringOffset(editText.getText(),editText.getSelectionStart)
我已经在所有条件下进行了测试,例如,单行或多行(由于控制此类行为,代码的某些部分似乎很明显),因此如果您没有时间调查这些行为,您只需复制并粘贴。
注意:要根据描述的问题获得所需的结果,您只需要加一个结果即可。
public static int getInLineOffsetFromStringOffset(CharSequence src,int offset){
Pattern p=Pattern.compile("(\r)|(\n)|(\n\r)");
Matcher m=p.matcher(src);
int x=offset;
int start=0,end=0,lastEnd=0;
if(m.find()){
end=m.end();
start=m.start();
if(!(end>x))
while(m.find()){
lastEnd=end;
end=m.end();
start=m.start();
if(end>x)
break;
}
}
if(!(end>x)){
lastEnd=end;
start=src.length();
end=src.length();
}
return (start<x)?-1:(x-(lastEnd));
}