텍스트 편집에서 커서 위치를 설정하는 방법은 무엇입니까?
가지가 .EditText
, 를 로드하는 동안 첫 됩니다. So 는 페지를로동텍첫안스번는편다설텍의 이제 커서가 시작 위치에 있습니다.EditText
데이터가 없는 두 번째 EditText에서 커서 위치를 설정하고 싶습니다.어떻게 하는 거지?
여기서 위치는 int입니다.
editText1.setSelection(position)
여기서 EditText의 텍스트를 프로그래밍 방식으로 업데이트한 후 커서 위치를 텍스트 끝으로 설정하는 방법을 수행했습니다.etmsg
EditText
etmsg.setText("Updated Text From another Activity");
int position = etmsg.length();
Editable etext = etmsg.getText();
Selection.setSelection(etext, position);
Android에서 편집 텍스트 커서 위치를 설정하는 방법
아래 코드는 커서를 시작 위치로 설정합니다.EditText
:
EditText editText = (EditText)findViewById(R.id.edittext_id);
editText.setSelection(0);
아래 코드는 커서를 의 끝으로 설정합니다.EditText
:
EditText editText = (EditText)findViewById(R.id.edittext_id);
editText.setSelection(editText.getText().length());
아래 코드는 일부 두 번째 문자 위치 다음에 커서를 설정합니다.
EditText editText = (EditText)findViewById(R.id.edittext_id);
editText.setSelection(2);
데이터가 없는 편집 텍스트에서 커서 위치를 설정합니다.
빈 편집 텍스트에는 하나의 위치만 있습니다.
아니면 당신이 당신의 삶에 집중하고 싶다는 뜻이었습니까?EditText
당신의 활동이 언제 시작됩니까?그렇다면 그것은
EditText2가 두 번째 EditText 뷰가 되도록 합니다. 그런 다음 Resume()에 다음 코드 조각을 넣습니다.
editText2.setFocusableInTouchMode(true);
editText2.requestFocus();
또는 놓음
<requestFocus />
두 번째 편집 텍스트 보기의 xml 레이아웃에 있습니다.
아래 행을 사용합니다.
e2.setSelection(e2.length());
e2
Object Name
편집 텍스트의 특정 위치에 커서를 놓으려면 다음을 사용할 수 있습니다.
yourEditText.setSelection(position);
또한 초기 및 최종 위치를 설정하여 다음과 같이 일부 텍스트를 프로그래밍 방식으로 선택할 수 있습니다.
yourEditText.setSelection(startPosition, endPosition);
문자 앞이나 뒤에 커서를 놓을 수 있기 때문에 선택 항목을 설정하는 것이 어려울 수 있습니다. 아래 이미지는 이 경우 인덱스 작업 방법을 설명합니다.
텍스트의 끝에 커서를 놓으려면 다음과 같이 설정합니다.yourEditText.length()
.
때때로 편집 텍스트 커서가 특정 위치에 오지 않는 경우가 있습니다.editText.setSelection(position);
그렇다면 당신은 시도할 수 있습니다.
editText.post(new Runnable() {
@Override
public void run() {
editText.setSelection(string.length());
}
});
setSelection(int index)
.Edittext
당신이 이것을 할 수 있도록 허락해야 합니다.
을: 을 사용합니다.edittext.setSelection()
하지 않습니다.alertdialog
를 들어, 예들어같설, 를▁the다▁set▁to▁for▁sure니▁make설,▁example정합같이를 설정해야 합니다.selection()
된 후
예:
AlertDialog dialog = builder.show();
input.setSelection(x,y);
이 코드는 텍스트 편집의 마지막 위치에 커서를 표시하는 데 도움이 됩니다.
editText.requestFocus();
editText.setSelection(editText.length());
커서를 편집 텍스트의 끝으로 이동합니다.
myEditText.setSelection(myEditText.getText().toString().length())
호출기라는 requestFocus()
앞에setSelection
텍스트를 편집할 수 있습니다.
다음과 같이 사용할 수 있습니다.
if (your_edittext.getText().length() > 0 ) {
your_edittext.setSelection(your_edittext.getText().length());
}
이 행을 EditText xml에 추가할 수 있습니까?
android:gravity="right"
android:ellipsize="end"
android:paddingLeft="10dp"//you set this as you need
그러나 텍스트 쓰기를 할 때는 왼쪽 패딩을 0으로 설정해야 합니다.
당신은 이것을 addTextChangedListener에 사용해야 합니다.
setSelection() 메소드를 직접 받지 않을 것이므로 아래와 같이 하고 매력적으로 작업합니다.
EditText editText = (EditText)findViewById(R.id.edittext_id);
editText.setText("Updated New Text");
int position = editText.getText().length();
Editable editObj= editText.getText();
Selection.setSelection(editObj, position);
다음 시간 이후에 커서를 설정하려면n
오른쪽에서 왼쪽으로 글자를 그리면 이렇게 해야 합니다.
edittext.setSelection(edittext.length()-n);
텍스트의 텍스트를 다음과 같이 편집하는 경우
version<sub></sub>
커서를 오른쪽에서 6번째 위치로 이동합니다.
그러면 커서가 다음 위치로 이동합니다.
version<sub> </sub>
^
EditText editText = findViewById(R.id.editText);
editText.setSelection(editText.getText().length());
if(myEditText.isSelected){
myEditText.setSelection(myEditText.length())
}
행 및 열에 커서 설정
다음 코드를 사용하여 편집 텍스트에서 특정 행과 열에 해당하는 위치를 가져올 수 있습니다.그러면 다음을 사용할 수 있습니다.editText.setSelection(getIndexFromPos(row, column))
커서 위치를 설정합니다.메소드에 대해 다음과 같은 호출을 할 수 있습니다.
getIndexFromPos(x, y)
선 의 x열 y로 y이의 합니다.getIndexFromPos(x, -1)
x 의 x 마 마지막 합니다.getIndexFromPos(-1, y)
의 열 합니다.getIndexFromPos(-1, -1)
줄의 합니다.
모든 선 및 열 경계가 처리됩니다. 선의 길이보다 큰 열을 입력하면 선의 마지막 열 위치가 반환됩니다.편집보다 큰 줄 입력텍스트의 줄 수가 마지막 줄로 이동합니다.테스트를 많이 했기 때문에 충분히 신뢰할 수 있을 것입니다.
static final String LINE_SEPARATOR = System.getProperty("line.separator");
int getIndexFromPos(int line, int column) {
int lineCount = getTrueLineCount();
if (line < 0) line = getLayout().getLineForOffset(getSelectionStart()); // No line, take current line
if (line >= lineCount) line = lineCount - 1; // Line out of bounds, take last line
String content = getText().toString() + LINE_SEPARATOR;
int currentLine = 0;
for (int i = 0; i < content.length(); i++) {
if (currentLine == line) {
int lineLength = content.substring(i, content.length()).indexOf(LINE_SEPARATOR);
if (column < 0 || column > lineLength) return i + lineLength; // No column or column out of bounds, take last column
else return i + column;
}
if (String.valueOf(content.charAt(i)).equals(LINE_SEPARATOR)) currentLine++;
}
return -1; // Should not happen
}
// Fast alternative to StringUtils.countMatches(getText().toString(), LINE_SEPARATOR) + 1
public int getTrueLineCount() {
int count;
String text = getText().toString();
StringReader sr = new StringReader(text);
LineNumberReader lnr = new LineNumberReader(sr);
try {
lnr.skip(Long.MAX_VALUE);
count = lnr.getLineNumber() + 1;
} catch (IOException e) {
count = 0; // Should not happen
}
sr.close();
return count;
}
그 질문은 이미 답이 나왔지만 누군가가 대신 그렇게 하고 싶어할 수도 있다고 생각했습니다.
각 문자를 반복 처리하여 줄 구분 기호를 찾을 때마다 줄 수를 늘립니다.선 카운트가 원하는 선과 같으면 현재 인덱스 + 열을 반환하거나, 열이 경계를 벗어나는 경우 선 끝 인덱스를 반환합니다.은 또한 수있다니습도를 할 수 .getTrueLineCount()
줄합니다.TextView.getLineCount()
.
코틀린에서 다음과 같은 확장 함수를 만들 수 있습니다.
fun EditText.placeCursorAtLast() {
val string = this.text.toString()
this.setSelection(string.length)
}
그런 다음 간단히 전화합니다.myEditText.placeCursorAtLast()
EditText에서 커서 위치를 설정하려면 아래 코드를 사용하십시오.
EditText rename;
String title = "title_goes_here";
int counts = (int) title.length();
rename.setSelection(counts);
rename.setText(title);
Android의 (xxx)xxx-xxxx처럼 US Mobile에서 포맷 후 자동으로 마지막 위치로 이동하는 커서 위치 문제 해결 방법
private String oldText = "";
private int lastCursor;
private EditText mEtPhone;
@Override
public void afterTextChanged(Editable s) {
String cleanString = AppUtil.cleanPhone(s.toString());
String format = cleanString.length() < 11 ? cleanString.replaceFirst("(\\d{3})(\\d{3})(\\d+)", "($1) $2-$3") :
cleanString.substring(0, 10).replaceFirst("(\\d{3})(\\d{3})(\\d+)", "($1) $2-$3");
boolean isDeleted = format.length() < oldText.length();
try {
int cur = AppUtil.getPointer(lastCursor, isDeleted ? s.toString() : format, oldText, isDeleted);
mEtPhone.setSelection(cur > 0 ? cur : format.length());
}catch (Exception e){
e.printStackTrace();
mEtPhone.setSelection(format.length());
}
mEtPhone.addTextChangedListener(this);
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
oldText = s.toString();
lastCursor = start;
}
내 경우 활동 이름이 AppUtil인 활동 클래스에 대해 아래 방법을 정의하고 전체적으로 액세스합니다.
public static int getPointer(int index, String newString, String oldText, boolean isDeleted){
int diff = Math.abs(newString.length() - oldText.length());
return diff > 1 ? isDeleted ? index - diff : index + diff : isDeleted ? index : index + 1;
}
public static String cleanPhone(String phone){
if(TextUtils.isEmpty(phone))
return "";
StringBuilder sb = new StringBuilder();
for(char c : phone.toCharArray()){
if(Character.isDigit(c))
sb.append(c);
}
return sb.toString();
}
그리고 만약 당신이 어떤 특정한 위치를 설정하고 싶다면.
edittext.setSelection(position);
Kotlin을 사용하여 커서 위치를 쉽게 얻는 방법:
val edInput = findViewById<EditText>(R.id.editTextInput)
var cursorPosition:Int = edInput.selectionStart
제가 이 문제에 답하기가 너무 늦어서, 저는 그것을 해결합니다.그냥 사용하세요.
Android:gravity="center_수평"
이를 위한 가장 간단한 방법은 패딩을 사용하는 것이라고 생각합니다.
xml의 텍스트 편집 섹션에서 Android:paddingLeft="100dp"를 추가합니다.그러면 커서 100dp의 시작 위치가 왼쪽 끝에서 오른쪽으로 이동합니다.
같은 방법으로 안드로이드를 사용할 수 있습니다:paddingRight="100dp"커서 100dp의 끝 위치가 오른쪽 끝에서 왼쪽으로 이동합니다.
자세한 내용은 내 블로그의 다음 기사를 참조하십시오.Android: 텍스트 편집 위젯에서 커서 시작 및 종료 위치 설정
언급URL : https://stackoverflow.com/questions/8035107/how-to-set-cursor-position-in-edittext
'programing' 카테고리의 다른 글
파이썬에서 사전 항목을 함수 인수로 전달하는 방법은 무엇입니까? (0) | 2023.08.24 |
---|---|
다음 요소에 대한 CSS의 선택기 구문은 무엇입니까? (0) | 2023.08.24 |
AJAX 페이지 다운로드 진행률 (0) | 2023.08.24 |
시퀀스 "HIbernATE_SEQUENCE"를 찾을 수 없습니다. SQL 문 (0) | 2023.08.24 |
XMLHttpRequest를 통해 파일을 멀티파트로 보냅니다. (0) | 2023.08.24 |