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
'Development Tip' 카테고리의 다른 글
API를 통해 미디어 위키 페이지에서 텍스트 콘텐츠 가져 오기 (0) | 2020.12.13 |
---|---|
PostgreSQL에서 공간 계산 및 절약 (0) | 2020.12.13 |
Windows에서 C 용 Eclipse를 찾을 수없는 시작 실패 바이너리 (0) | 2020.12.13 |
vue-cli 프로젝트에서 포트 번호를 변경하는 방법 (0) | 2020.12.13 |
Android 장치에서 ARM 프로세서 버전을 찾는 방법은 무엇입니까? (0) | 2020.12.13 |