programing

텍스트 편집에서 커서 위치를 설정하는 방법은 무엇입니까?

closeapi 2023. 8. 24. 22:05
반응형

텍스트 편집에서 커서 위치를 설정하는 방법은 무엇입니까?

가지가 .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);

문자 이나 뒤에 커서를 놓을 수 있기 때문에 선택 항목을 설정하는 것이 어려울 수 있습니다. 아래 이미지는 이 경우 인덱스 작업 방법을 설명합니다.

enter image description here

텍스트의 끝에 커서를 놓으려면 다음과 같이 설정합니다.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

반응형