Development Tip

Android : 현재 위치에서 EditText에 텍스트 삽입

yourdevel 2020. 12. 13. 11:17
반응형

Android : 현재 위치에서 EditText에 텍스트 삽입


버튼을 눌러 EditText에 상수 문자열을 삽입하고 싶습니다. 문자열은 EditText의 현재 위치에 삽입되어야합니다. 내가 사용 EditText.append하면 텍스트가 EditText 끝에 삽입됩니다.

어떻게 할 수 있습니까? 적절한 방법을 찾지 못했습니다.


EditText.getSelectionStart()커서의 현재 위치를 가져 오려면를 사용하십시오 . 그런 다음 String.subString을 사용하여 커서 앞뒤에 텍스트를 가져오고 중간에 텍스트를 삽입 할 수 있습니다.


Cpt. Ohlund가 올바른 힌트를주었습니다. 이제 부분적으로를 사용하여 해결 EditText.getSelectionStart()했지만 선택한 텍스트를 동일한 표현식으로 바꿀 수도 있으며 필요하지 않다는 것을 깨달았습니다 String.subString().

int start = Math.max(myEditText.getSelectionStart(), 0);
int end = Math.max(myEditText.getSelectionEnd(), 0);
myEditText.getText().replace(Math.min(start, end), Math.max(start, end),
        textToInsert, 0, textToInsert.length());

이것은 현재 위치에 텍스트를 삽입하고 사용자가 선택한 텍스트를 대체하는 두 가지 모두에 적용됩니다. Math.max()거기 글고에는 선택하거나 커서가없는 경우이므로, 제 1 및 제 2 라인의 필요 getSelectionStart()getSelectionEnd()것 모두 -1을 반환. Math.min()Math.max()사용자가 텍스트 뒤로를 선택하여 허용되지 않습니다 말보다 더 높은 값을 가질 것이다 시작할 수도 있기 때문에 세 번째 줄에 필요하다 Editable.replace().


이것은 더 간단 해 보입니다.

yourEditText.getText().insert(yourEditText.getSelectionStart(), "fizzbuzz");

그러나 선택한 텍스트를 삽입 된 텍스트로 바꾸려면 Manuel의 대답이 더 좋을 수 있습니다.


이 기능이 도움이 될 것이라고 생각합니다.

public void insertConstantStr(String insertStr) {
    String oriContent = editText.getText().toString();
    int index = editText.getSelectionStart() >= 0 ? editText.getSelectionStart() : 0;
    StringBuilder sBuilder = new StringBuilder(oriContent);
    sBuilder.insert(index, insertStr);
    editText.setText(sBuilder.toString());
    editText.setSelection(index + insertStr.length());
}

참고 URL : https://stackoverflow.com/questions/3609174/android-insert-text-into-edittext-at-current-position

반응형