EditText
onの値を変更していますkeyListener
。
しかし、テキストを変更すると、カーソルがの先頭に移動しますEditText
。テキストの最後にカーソルを置く必要があります。
のテキストの最後にカーソルを移動する方法EditText
。
EditText
onの値を変更していますkeyListener
。
しかし、テキストを変更すると、カーソルがの先頭に移動しますEditText
。テキストの最後にカーソルを置く必要があります。
のテキストの最後にカーソルを移動する方法EditText
。
これを試して:
アップデート:
コトリン:
editText.setSelection(editText.length())//placing cursor at the end of the text
ジャワ:
editText.setSelection(editText.getText().length());
文字列値を現在の edittext 値に追加し、カーソルを値の末尾に配置する ediitext の append と呼ばれる関数があります。現在の編集テキスト値自体として文字列値を取得し、append(); を呼び出すことができます。
myedittext.append("current_this_edittext_string");
コトリン:
カーソルを開始位置に設定します:
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);
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()。
EditText
次のように、ビュー内のテキストの最後にカーソルを置くこともできます。
EditText et = (EditText)findViewById(R.id.textview);
int textLength = et.getText().length();
et.setSelection(textLength, textLength);
editText.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
editText.setSelection(editText.getText().length());
return false;
}
});
これは別の解決策です。
et.append("");
何らかの理由で機能しない場合は、次の解決策を試してください。
et.setSelection(et.getText().length());
EditText's
methodの助けを借りてそれを達成できるはずです。ここsetSelection()
を参照してください
これはあなたが望むものを達成できると思います。
Editable etext = mSubjectTextEditor.getText();
Selection.setSelection(etext, etext.length());
これは機能します
Editable etext = edittext.getText();
Selection.setSelection(etext,edittext.getText().toString().length());
私がテストした他のすべてのコードは、ユーザーが文字列の途中のどこにでもキャレット/カーソルを配置できるため、うまく機能しませんでした (例: 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) {
}
});
それが役に立てば幸い!
etSSID.setSelection(etSSID.getText().length());