2011-10-02 6 views
2

edittext에는 커서의 현재 줄을 가져 오는 방법이 있습니까? 그렇지 않으면 나는 내 자신의 방법을 쓸 것이지만, 단지 확인하고 싶었다. 만약 내 자신의 방법을 쓰는게 가장 좋은 방법은 selectionstart 때까지 edittext의 모든 문자를 통과하고 For 루프를 사용하여 \ n의 수를 세는 것인가? 아니면 더 좋은 방법이 있을까요? 감사!Android : Edittext- 현재 줄 가져 오기

답변

12

그냥하자 사람들은 알고 문제는 커서가 현재 행을 찾는 것에 대해입니다

public int getCurrentCursorLine(EditText editText) 
{  
    int selectionStart = Selection.getSelectionStart(editText.getText()); 
    Layout layout = editText.getLayout(); 

    if (!(selectionStart == -1)) { 
     return layout.getLineForOffset(selectionStart); 
    } 

    return -1; 
} 
+0

니스, 실제로 더 좋습니다! 나는이 일을하는 방법을 찾고있는 API를 보았지만 그 때 찾지 못했습니다. 그것은 API 레벨 1 이후 분명히 거기에있었습니다. –

+0

신 작업. 감사합니다. – sirmagid

0

lastindex = String.lastindexof ("\ n") 메서드를 사용하여 "\ n"의 마지막 인덱스를 찾은 다음 String.substring (lstindex, string.length) 메서드를 사용하여 부분 문자열을 가져오고 마지막 줄 두 줄의 코드로

+0

:

다음 더그 바울이 getLineForOffset(selection)를 사용하여 제안했다이 할 수있는 더 좋은 방법이있다 켜져 있지만 커서의 위치를 ​​대답하지 않은 것 같습니다. –

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에서, 그러나 사용한다 가능하다면 해당 질문에 대한 더 나은 답변 중 하나 (예 : StringUtils.countMatches() from commons lang).

이 방법을 보여주는 완전한 작동 예제가 있으므로 도움이 더 필요하면 알려주세요.

희망이 도움이됩니다.