Android: Edittext- get current line

馋奶兔 提交于 2019-11-30 21:55:10
Henry Thompson

Just to let people know:

There is a better way to do this then Doug Paul has suggested by using the 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;
}
Doug Paul

I can't find a simple way to get this information either, so your approach seems about right. Don't forget to check for the case where getSelectionStart() returns 0. You can make the code reusable by putting it in a static utility method, like this:

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');
}

The countOccurrences() method is from this question, but you should use one of the better answers to that question (e.g. StringUtils.countMatches() from commons lang) if feasible.

I have a full working example that demonstrates this method, so let me know if you need more help.

Hope this helps!

find the last index of "\n"using method lastindex=String.lastindexof("\n") then get a substring using method String.substring(lstindex,string.length).and you will get the last line in two lines of code.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!