在edittext中是否有获取光标当前行的方法?如果不是,我会写自己的方法,但只是想检查。如果我编写自己的方法,最好的方法是遍历edittext中的每个字符,直到selectionstart并使用For循环计算\ n的数量,或者有更好的方法吗?谢谢!
答案 0 :(得分:14)
只是为了让人们知道:
有一种更好的方法可以做到这一点然后道格保罗建议使用getLineForOffset(selection)
:
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 :(得分:2)
我找不到一种获取此信息的简单方法,因此您的方法似乎正确。不要忘记检查getSelectionStart()
返回0的情况。您可以通过将代码放入静态实用程序方法来使代码可重用,如下所示:
private int getCurrentCursorLine(Editable editable) {
int selectionStartPos = Selection.getSelectionStart(editable);
if (selectionStartPos < 0) {
// There is no selection, so return -1 like getSelectionStart() does when there is no seleciton.
return -1;
}
String preSelectionStartText = editable.toString().substring(0, selectionStartPos);
return countOccurrences(preSelectionStartText, '\n');
}
countOccurrences()
方法来自this question,但如果可行,您应该使用该问题的一个更好的答案(例如,来自commons lang的StringUtils.countMatches()
。
我有一个完整的工作示例演示了这种方法,如果您需要更多帮助,请告诉我。
希望这有帮助!
答案 2 :(得分:0)
使用方法lastindex = String.lastindexof(“\ n”)查找“\ n”的最后一个索引,然后使用方法String.substring(lstindex,string.length)获取子字符串。您将获得最后一行 在两行代码中。