Android:Edittext-获取当前行

时间:2011-10-02 15:46:47

标签: android android-edittext

在edittext中是否有获取光标当前行的方法?如果不是,我会写自己的方法,但只是想检查。如果我编写自己的方法,最好的方法是遍历edittext中的每个字符,直到selectionstart并使用For循环计算\ n的数量,或者有更好的方法吗?谢谢!

3 个答案:

答案 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)获取子字符串。您将获得最后一行 在两行代码中。