web-dev-qa-db-ja.com

EditTextのテキストの最後にカーソルを置きます

EditTextkeyListenerの値を変更しています。

しかし、テキストを変更すると、カーソルはEditTextの先頭に移動します。カーソルをテキストの最後に置く必要があります。

EditText内のテキストの末尾にカーソルを移動する方法。

782
Manu

これを試して:

EditText et = (EditText)findViewById(R.id.inbox);
et.setSelection(et.getText().length());
1215
Marqs

現在のedittextの値に文字列の値を追加してカーソルを値の末尾に配置する、append for ediitextという関数があります。文字列値を現在の編集テキスト値そのものにしてappend()を呼び出すことができます。

myedittext.append("current_this_edittext_string"); 
207
James

Kotlin

カーソルを開始位置に設定します。

val editText = findViewById(R.id.edittext_id) as EditText
editText.setSelection(0)

カーソルをEditTextの終わりに設定します。

val editText = findViewById(R.id.edittext_id) as EditText
editText.setSelection(editText.getText().length())

コードの下には、カーソル2番目の文字の後:を置きます。

val editText = findViewById(R.id.edittext_id) as EditText
editText.setSelection(2)

Java

カーソルを開始位置に設定します。

 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());

コードの下には、カーソル2番目の文字の後:を置きます。

EditText editText = (EditText)findViewById(R.id.edittext_id);
editText.setSelection(2);
103
Mr.vicky patel

以前にsetTextを呼び出していて、新しいテキストがレイアウトフェーズにならなかった場合は、View.post(Runnable)によって起動される別のランナブルでsetSelectionを呼び出します( this topicからの再投稿)。

だから、私にとっては、このコードは動作します:

editText.setText("text");
editText.post(new Runnable() {
         @Override
         public void run() {
             registerPhone.setSelection("text".length());
         }
});
64

次のようにEditTextビューでテキストの末尾にカーソルを置くこともできます。

EditText et = (EditText)findViewById(R.id.textview);
int textLength = et.getText().length();
et.setSelection(textLength, textLength);
40
toobsco42
editText.setOnKeyListener(new View.OnKeyListener() {
    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        editText.setSelection(editText.getText().length());
        return false;
    }
});
26
Mario

これは別の可能な解決策です:

et.append("");

何らかの理由でうまくいかない場合は、この解決方法を試してください。

et.setSelection(et.getText().length());
19
Kreshnik

私の場合は、次のようなkotlin extを作成しました。機能、誰かに役立つかもしれません

 private fun EditText.focus(){
        requestFocus()
        setSelection(length())
    }

それから次のように使ってください

mEditText.focus()
11
Igor Siqueira

あなたはEditTextのメソッドsetSelection()でそれを達成することができるはずです/を見てください - ここ

11
Maximus
/**
 * Set cursor to end of text in edittext when user clicks Next on Keyboard.
 */
View.OnFocusChangeListener onFocusChangeListener = new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View view, boolean b) {
        if (b) {
            ((EditText) view).setSelection(((EditText) view).getText().length());
        }
    }
};

mEditFirstName.setOnFocusChangeListener(onFocusChangeListener); 
mEditLastName.setOnFocusChangeListener(onFocusChangeListener);

それは私のためにうまくいきます!

10
Anh Duy

私はこれがあなたが望むものを達成できると思います。

 Editable etext = mSubjectTextEditor.getText();
 Selection.setSelection(etext, etext.length());
9
Li Che

あなたのEditTextが明確でないならば:

editText.setText("");
editText.append("New text");
7
Leo Droidcoder

この質問は古くからあるものですが、新しくリリースされたAndroid用DataBindingツールを使用する場合は、この回答をXMLに設定しておくと便利です。

<data>
    <variable name="stringValue" type="String"/>
</data>
...
<EditText
        ...
        Android:text="@={stringValue}"
        Android:selection="@{stringValue.length()}"
        ...
/>
6
djleop

enter image description here

こんにちは

 <EditText
       Android:id="@+id/edt_text"
       Android:layout_width="match_parent"
       Android:layout_height="wrap_content"
       Android:text="Hello World!"
       Android:cursorVisible="true"/>

EditText editText = findViewById(R.id.editText); editText.setSelection(editText.getText().length()); // End pointCursor

5
Rahul Patil

この作品

Editable etext = edittext.getText();
Selection.setSelection(etext,edittext.getText().toString().length());
4
Hardik Vasani

すべてのテキストを選択し、古いテキストの代わりに新しいテキストを入力するだけの場合は、次のようにします。

    Android:selectAllOnFocus="true"
4
ar-g

私がテストした他のすべてのコードは、ユーザーが文字列の途中のどこにでもキャレット/カーソルを置くことができるという事実のためにうまくいきませんでした(例:12 | 3.00 - |はカーソルです)。私の解決策は、タッチがEditTextで行われるときはいつでもカーソルを常に文字列の終わりに置きます。

究極の解決策は次のとおりです。

// For a EditText like:
<EditText
                Android:id="@+id/EditTextAmount"
                Android:layout_height="wrap_content"
                Android:layout_width="fill_parent"
                Android:hint="@string/amount"
                Android:layout_weight="1"
                Android:text="@string/zero_value"
                Android:inputType="text|numberDecimal"
                Android:maxLength="13"/>

@ string/amount = "0.00" @ string/zero_value = "0.00"

// Create a Static boolean flag
private static boolean returnNext; 


// Set caret/cursor to the end on focus change
EditTextAmount.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View editText, boolean hasFocus) {
                if(hasFocus){
                    ((EditText) editText).setSelection(((EditText) editText).getText().length());
                }
            }
        });

// Create a touch listener and put caret to the end (no matter where the user touched in the middle of the string)
EditTextAmount.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View editText, MotionEvent event) {
                ((EditText) editText).onTouchEvent(event);
                ((EditText) editText).setSelection(((EditText) editText).getText().length());
                return true;
            }
        });


// Implement a Currency Mask with addTextChangedListener
EditTextAmount.addTextChangedListener(new TextWatcher() {
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                String input = s.toString();
                String output = new String();
                String buffer = new String();
                String decimals = new String();
                String numbers = Integer.toString(Integer.parseInt(input.replaceAll("[^0-9]", "")));

                if(returnNext){
                    returnNext = false;
                    return;
                }

                returnNext = true;

                if (numbers.equals("0")){
                    output += "0.00";
                }
                else if (numbers.length() <= 2){
                    output += "0." + String.format("%02d", Integer.parseInt(numbers));
                }
                else if(numbers.length() >= 3){
                    decimals = numbers.substring(numbers.length() - 2);
                    int commaCounter = 0;
                    for(int i=numbers.length()-3; i>=0; i--){
                        if(commaCounter == 3){
                            buffer += ",";
                            commaCounter = 0;
                        }
                        buffer += numbers.charAt(i);
                        commaCounter++;
                    }
                    output = new StringBuilder(buffer).reverse().toString() + "." + decimals;
                }
                EditTextAmount.setText(output);
                EditTextAmount.setSelection(EditTextAmount.getText().length());
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                /*String input = s.toString();
                if(input.equals("0.0")){
                    EditTextAmount.setText("0.00");
                    EditTextAmount.setSelection(EditTextAmount.getText().length());
                    return;
                }*/
            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });

それが役に立てば幸い!

3
Daniel Almeida

ここではeditText.setSelectionが魔法です。基本的に選択はあなたが望む任意の位置にカーソルを置くことを可能にします。

EditText editText = findViewById(R.id.editText);
editText.setSelection(editText.getText().length());

これにより、カーソルはEditTextの最後に移動します。基本的にeditText.getText().length()はあなたにテキストの長さを与えます。それからsetSelectionを長さで使います。

editText.setSelection(0);

カーソルを開始位置(0)に設定するためのものです。

3
Khemraj

これでうまくいく/ 安全に

    editText.setText("");
    if (!TextUtils.isEmpty(text)) {
        editText.append(text);
    }
2

@Anh Duyの答えに似ていますが、それは私にとってうまくいきませんでした。私はまた、ユーザーが編集テキストをタップしてもカーソルの位置を選択できるようになったときにのみカーソルを最後まで移動させる必要がありました。これは私にとっては有効な唯一のコードです。

boolean textFocus = false; //define somewhere globally in the class

//in onFinishInflate() or somewhere
editText.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {

        editText.onTouchEvent(event);

        if(!textFocus) {
            editText.setSelection(editText.getText().length());
            textFocus = true;
        }

        return true;
    }
});

editText.setOnFocusChangeListener(new OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        textFocus = false;
    }
});
1
Fonix
etSSID.setSelection(etSSID.getText().length());
0
siby varghese

EditTextビューでテキストの末尾にカーソルを置きたい場合

 EditText rename;
 String title = "title_goes_here";
 int counts = (int) title.length();
 rename.setSelection(counts);
 rename.setText(title);
0
Mujahid khan