Java 将光标放在EditText中文本的末尾
我正在更改Java 将光标放在EditText中文本的末尾,java,android,kotlin,android-edittext,keylistener,Java,Android,Kotlin,Android Edittext,Keylistener,我正在更改keyListener上的EditText的值 但是当我更改文本时,光标移动到EditText的开头。 我需要光标在文本的末尾 如何在EditText中将光标移动到文本的末尾,您应该能够借助EditText的方法setSelection()实现这一点,请参见尝试以下操作: 更新: editText.setSelection(editText.text.toString().length)//placing cursor at the end of the text editText.
keyListener
上的EditText
的值
但是当我更改文本时,光标移动到EditText
的开头。
我需要光标在文本的末尾
如何在
EditText
中将光标移动到文本的末尾,您应该能够借助EditText的
方法setSelection()
实现这一点,请参见尝试以下操作:
更新:
editText.setSelection(editText.text.toString().length)//placing cursor at the end of the text
editText.setSelection(editText.getText().length());
val editText = findViewById(R.id.edittext_id) as EditText
editText.setSelection(2)
EditText editText = (EditText)findViewById(R.id.edittext_id);
editText.setSelection(2);
Kotlin:
editText.setSelection(editText.text.toString().length)//placing cursor at the end of the text
editText.setSelection(editText.getText().length());
val editText = findViewById(R.id.edittext_id) as EditText
editText.setSelection(2)
EditText editText = (EditText)findViewById(R.id.edittext_id);
editText.setSelection(2);
Java:
editText.setSelection(editText.text.toString().length)//placing cursor at the end of the text
editText.setSelection(editText.getText().length());
val editText = findViewById(R.id.edittext_id) as EditText
editText.setSelection(2)
EditText editText = (EditText)findViewById(R.id.edittext_id);
editText.setSelection(2);
有一个名为append for edittext的函数,它将字符串值附加到当前edittext值,并将光标放在值的末尾。 您可以将字符串值作为当前EDITEXT值本身,并调用append()
我认为这可以实现你想要的
Editable etext = mSubjectTextEditor.getText();
Selection.setSelection(etext, etext.length());
EditText editText = findViewById(R.id.editText);
editText.setSelection(editText.getText().length());
您还可以将光标放置在
EditText
视图中文本的末尾,如下所示:
EditText et = (EditText)findViewById(R.id.textview);
int textLength = et.getText().length();
et.setSelection(textLength, textLength);
如果您之前调用了
setText
,而新文本没有得到布局阶段,则在由View.post(runnable)
(从主题重新发布)触发的单独runnable中调用setSelection
所以,对我来说,这段代码是有效的:
editText.setText("text");
editText.post(new Runnable() {
@Override
public void run() {
editText.setSelection(editText.getText().length());
}
});
编辑2019年5月16日:现在我正在使用Kotlin扩展:
fun EditText.placeCursorToEnd() {
this.setSelection(this.text.length)
}
然后-editText.placeCursorToEnd()。这是另一种可能的解决方案:
et.append("");
如果此解决方案因任何原因无效,请尝试此解决方案:
et.setSelection(et.getText().length());
这对我有好处 类似于@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;
}
});
这会安全地完成以下操作:
editText.setText("");
if (!TextUtils.isEmpty(text)) {
editText.append(text);
}
如果您的编辑文本不清晰:
editText.setText("");
editText.append("New text");
或
如果要选择所有文本并只输入新文本而不是旧文本,可以使用
android:selectAllOnFocus="true"
所有我测试过的其他代码都不好,因为用户仍然可以将插入符号/光标放置在字符串的中间(例如:12×3——其中是光标)。每当触摸文本时,我的解决方案总是将光标放在字符串的末尾
最终的解决办法是:// 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"/>
//对于编辑文本,如:
@字符串/金额=“0.00”
@字符串/zero_value=“0.00”
//创建一个静态布尔标志
私有静态布尔值;
//将插入符号/光标设置为焦点更改时的结尾
EditTextAmount.setOnFocusChangeListener(新视图.OnFocusChangeListener(){
@凌驾
public void onFocusChange(查看编辑文本,布尔hasFocus){
如果(hasFocus){
((EditText)EditText.setSelection(((EditText)EditText.getText().length());
}
}
});
/创建一个触摸侦听器并将插入符号放在末尾(无论用户在字符串中间触摸的位置)
EditTextAmount.setOnTouchListener(新视图.OnTouchListener(){
@凌驾
公共布尔onTouch(查看编辑文本、运动事件){
((EditText)EditText.onTouchEvent(事件);
((EditText)EditText.setSelection(((EditText)EditText.getText().length());
返回true;
}
});
//使用addTextChangedListener实现货币掩码
EditTextAmount.addTextChangedListener(新的TextWatcher(){
@凌驾
public void onTextChanged(字符序列、int start、int before、int count){
字符串输入=s.toString();
字符串输出=新字符串();
字符串缓冲区=新字符串();
字符串小数=新字符串();
字符串编号=Integer.toString(Integer.parseInt(input.replaceAll(“[^0-9]”,“”));
如果(返回下一个){
returnNext=false;
返回;
}
returnNext=true;
if(数字等于(“0”)){
输出+=“0.00”;
}
else if(number.length()=3){
小数=numbers.substring(numbers.length()-2);
int commaCounter=0;
对于(int i=numbers.length()-3;i>=0;i--){
如果(commaCounter==3){
缓冲区+=“,”;
通信计数器=0;
}
缓冲区+=数字。字符(i);
commaCounter++;
}
输出=新的StringBuilder(缓冲区).reverse().toString()+“+”+小数;
}
EditTextAmount.setText(输出);
EditTextAmount.setSelection(EditTextAmount.getText().length());
}
@凌驾
更改前文本之前的公共void(字符序列s、int start、int count、int after){
/*字符串输入=s.toString();
if(输入等于(“0.0”)){
EditTextAmount.setText(“0.00”);
EditTextAmount.setSelection(EditTextAmount.getText().length());
返回;
}*/
}
@凌驾
公共无效后文本已更改(可编辑){
}
});
希望有帮助 这很有效
Editable etext = edittext.getText();
Selection.setSelection(etext,edittext.getText().toString().length());
Kotlin:
val editText = findViewById(R.id.edittext_id) as EditText
editText.setSelection(0)
val editText = findViewById(R.id.edittext_id) as EditText
editText.setSelection(editText.text.length)
EditText editText = (EditText)findViewById(R.id.edittext_id);
editText.setSelection(0);
EditText editText = (EditText)findViewById(R.id.edittext_id);
editText.setSelection(editText.getText().length());
将光标设置到起始位置:
val editText = findViewById(R.id.edittext_id) as EditText
editText.setSelection(0)
val editText = findViewById(R.id.edittext_id) as EditText
editText.setSelection(editText.text.length)
EditText editText = (EditText)findViewById(R.id.edittext_id);
editText.setSelection(0);
EditText editText = (EditText)findViewById(R.id.edittext_id);
editText.setSelection(editText.getText().length());
将光标设置到编辑文本的末尾:
val editText = findViewById(R.id.edittext_id) as EditText
editText.setSelection(0)
val editText = findViewById(R.id.edittext_id) as EditText
editText.setSelection(editText.text.length)
EditText editText = (EditText)findViewById(R.id.edittext_id);
editText.setSelection(0);
EditText editText = (EditText)findViewById(R.id.edittext_id);
editText.setSelection(editText.getText().length());
下面的代码将光标放在第二个字符之后:
editText.setSelection(editText.text.toString().length)//placing cursor at the end of the text
editText.setSelection(editText.getText().length());
val editText = findViewById(R.id.edittext_id) as EditText
editText.setSelection(2)
EditText editText = (EditText)findViewById(R.id.edittext_id);
editText.setSelection(2);
JAVA:
val editText = findViewById(R.id.edittext_id) as EditText
editText.setSelection(0)
val editText = findViewById(R.id.edittext_id) as EditText
editText.setSelection(editText.text.length)
EditText editText = (EditText)findViewById(R.id.edittext_id);
editText.setSelection(0);
EditText editText = (EditText)findViewById(R.id.edittext_id);
editText.setSelection(editText.getText().length());
将光标设置到起始位置:
val editText = findViewById(R.id.edittext_id) as EditText
editText.setSelection(0)
val editText = findViewById(R.id.edittext_id) as EditText
editText.setSelection(editText.text.length)
EditText editText = (EditText)findViewById(R.id.edittext_id);
editText.setSelection(0);
EditText editText = (EditText)findViewById(R.id.edittext_id);
editText.setSelection(editText.getText().length());
将光标设置到编辑文本的末尾:
val editText = findViewById(R.id.edittext_id) as EditText
editText.setSelection(0)
val editText = findViewById(R.id.edittext_id) as EditText
editText.setSelection(editText.text.length)
EditText editText = (EditText)findViewById(R.id.edittext_id);
editText.setSelection(0);
EditText editText = (EditText)findViewById(R.id.edittext_id);
editText.setSelection(editText.getText().length());
下面的代码将光标放在第二个字符之后:
editText.setSelection(editText.text.toString().length)//placing cursor at the end of the text
editText.setSelection(editText.getText().length());
val editText = findViewById(R.id.edittext_id) as EditText
editText.setSelection(2)
EditText editText = (EditText)findViewById(R.id.edittext_id);
editText.setSelection(2);
在XML文件中使用此CustomEditText,这将起作用。我已经测试过了,它对我有效。