web-dev-qa-db-ja.com

EditTextでカーソルの配置とテキスト選択を無効にする方法は? (アンドロイド)

ユーザーがカーソル位置をどこにも移動できないようにする方法を探しています。カーソルは常に現在のEditText値の末尾に留まる必要があります。さらに、ユーザーはEditTextで何も選択できないようにする必要があります。 Android EditTextを使用してそれを実現する方法はありますか?

明確にするために、ユーザーはテキストを挿入できる必要がありますが、最後にのみ挿入できます。

30
Louis

私も同じ問題を抱えていました。これは私のために働いてしまいました:

public class CustomEditText extends EditText {

    @Override
    public void onSelectionChanged(int start, int end) {

        CharSequence text = getText();
        if (text != null) {
            if (start != text.length() || end != text.length()) {
                setSelection(text.length(), text.length());
                return;
            }
        }

        super.onSelectionChanged(start, end);
    }

}
44
mikejonesguy

これを試して:

mEditText.setMovementMethod(null);
7
Jason Lin

これにより、カーソルのフォーカスがテキストの最後の位置にリセットされます

editText.setSelection(editText.getText().length());

このメソッドは、タッチ時のカーソル移動を無効にします

public class MyEditText extends EditText{

    @Override
    public boolean onTouchEvent(MotionEvent event)
    {
         final int eventX = event.getX();
         final int eventY = event.getY();
         if( (eventX,eventY) is in the middle of your editText)
         {
              return false;
         }
         return true;
    }
}

そして、あなたはどちらかのxml属性を使うことができます

Android:cursorVisible

またはJava関数

setCursorVisible(ブール)

edittextの点滅カーソルを無効にする

7
Hein

これを行う最良の方法は、独自のCustomEditTextクラスを作成し、関連するメソッドをオーバーライド/変更することです。 ソースコードEditTextはこちらで確認できます。

public class CustomEditText extends EditText {

    @Override
    public void selectAll() {
        // Do nothing
    }

    /* override other methods, etc. */

}
1
Alex Lockwood