998

EditTextonの値を変更していますkeyListener

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

のテキストの最後にカーソルを移動する方法EditText

4

26 に答える 26

1453

これを試して:

アップデート:

コトリン:

editText.setSelection(editText.length())//placing cursor at the end of the text

ジャワ:

editText.setSelection(editText.getText().length());
于 2011-07-08T12:07:48.423 に答える
240

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

myedittext.append("current_this_edittext_string"); 
于 2011-12-16T02:53:57.173 に答える
156

コトリン

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

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.text.length)

以下のコードは、2 番目の文字の後にカーソルを配置することです。

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

ジャワ

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

 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);
于 2017-06-08T07:12:21.530 に答える
131

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

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

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

編集 05/16/2019: 現在、そのために Kotlin 拡張機能を使用しています。

fun EditText.placeCursorToEnd() {
    this.setSelection(this.text.length)
}

そして - editText.placeCursorToEnd()。

于 2013-04-16T13:30:27.110 に答える
43

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

EditText et = (EditText)findViewById(R.id.textview);
int textLength = et.getText().length();
et.setSelection(textLength, textLength);
于 2013-02-28T17:49:17.003 に答える
29
editText.setOnKeyListener(new View.OnKeyListener() {
    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        editText.setSelection(editText.getText().length());
        return false;
    }
});
于 2014-10-16T18:00:01.533 に答える
22

これは別の解決策です。

et.append("");

何らかの理由で機能しない場合は、次の解決策を試してください。

et.setSelection(et.getText().length());
于 2014-04-05T22:27:30.867 に答える
14

EditText'smethodの助けを借りてそれを達成できるはずです。ここsetSelection()を参照してください

于 2011-06-02T17:04:33.643 に答える
12

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

 Editable etext = mSubjectTextEditor.getText();
 Selection.setSelection(etext, etext.length());
于 2012-11-27T02:43:42.467 に答える
6

これは機能します

Editable etext = edittext.getText();
Selection.setSelection(etext,edittext.getText().toString().length());
于 2017-05-03T07:31:22.163 に答える
4

私がテストした他のすべてのコードは、ユーザーが文字列の途中のどこにでもキャレット/カーソルを配置できるため、うまく機能しませんでした (例: 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) {

            }
        });

それが役に立てば幸い!

于 2016-12-03T17:07:31.673 に答える
3
etSSID.setSelection(etSSID.getText().length());
于 2019-06-26T10:49:40.923 に答える