Man*_*anu 839 android keylistener android-edittext
我改变的价值EditText上keyListener.
但是当我改变文本时,光标移动到了文本的开头EditText.我需要光标位于文本的末尾.
如何将光标移动到文本的末尾EditText.
Mar*_*rqs 1270
试试这个:
EditText et = (EditText)findViewById(R.id.inbox);
et.setSelection(et.getText().length());
Run Code Online (Sandbox Code Playgroud)
Jam*_*mes 216
有一个名为append for ediitext的函数,它将字符串值附加到当前的edittext值,并将光标放在值的末尾.您可以将字符串值作为当前ediitext值本身并调用append();
myedittext.append("current_this_edittext_string");
Run Code Online (Sandbox Code Playgroud)
Mr.*_*tel 122
科特林:
将光标设置为起始位置:
val editText = findViewById(R.id.edittext_id) as EditText
editText.setSelection(0)
Run Code Online (Sandbox Code Playgroud)
将光标设置为EditText的末尾:
val editText = findViewById(R.id.edittext_id) as EditText
editText.setSelection(editText.text.length)
Run Code Online (Sandbox Code Playgroud)
Code下面是将光标放在第二个字符后面:
val editText = findViewById(R.id.edittext_id) as EditText
editText.setSelection(2)
Run Code Online (Sandbox Code Playgroud)
JAVA:
将光标设置为起始位置:
EditText editText = (EditText)findViewById(R.id.edittext_id);
editText.setSelection(0);
Run Code Online (Sandbox Code Playgroud)
将光标设置为EditText的末尾:
EditText editText = (EditText)findViewById(R.id.edittext_id);
editText.setSelection(editText.getText().length());
Run Code Online (Sandbox Code Playgroud)
Code下面是将光标放在第二个字符后面:
EditText editText = (EditText)findViewById(R.id.edittext_id);
editText.setSelection(2);
Run Code Online (Sandbox Code Playgroud)
Ant*_*nko 75
如果你打电话setText之前,新的案文没有得到布局阶段的呼叫setSelection在一个单独运行的燃煤通过View.post(Runnable)(从重新发布这个话题).
所以,对我来说这个代码有效:
editText.setText("text");
editText.post(new Runnable() {
@Override
public void run() {
registerPhone.setSelection("text".length());
}
});
Run Code Online (Sandbox Code Playgroud)
too*_*o42 41
您还可以将光标放在EditText视图中文本的末尾,如下所示:
EditText et = (EditText)findViewById(R.id.textview);
int textLength = et.getText().length();
et.setSelection(textLength, textLength);
Run Code Online (Sandbox Code Playgroud)
小智 27
editText.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
editText.setSelection(editText.getText().length());
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
Kre*_*nik 21
这是另一种可能的解决方案
et.append("");
Run Code Online (Sandbox Code Playgroud)
如果它因任何原因不起作用,请尝试此解决方案:
et.setSelection(et.getText().length());
Run Code Online (Sandbox Code Playgroud)
小智 12
在我的情况下,我创建了以下kotlin ext.功能,可能对某人有用
private fun EditText.focus(){
requestFocus()
setSelection(length())
}
Run Code Online (Sandbox Code Playgroud)
然后使用如下
mEditText.focus()
Run Code Online (Sandbox Code Playgroud)
Anh*_*Duy 11
/**
* 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);
Run Code Online (Sandbox Code Playgroud)
它对我有用!
Li *_*Che 10
我认为这可以实现你想要的.
Editable etext = mSubjectTextEditor.getText();
Selection.setSelection(etext, etext.length());
Run Code Online (Sandbox Code Playgroud)
如果您的EditText不清楚:
editText.setText("");
editText.append("New text");
Run Code Online (Sandbox Code Playgroud)
这个问题已经过时并且已经回答了,但我认为如果您想使用Android最新发布的DataBinding工具,只需在XML中设置它就可能有用这个答案:
<data>
<variable name="stringValue" type="String"/>
</data>
...
<EditText
...
android:text="@={stringValue}"
android:selection="@{stringValue.length()}"
...
/>
Run Code Online (Sandbox Code Playgroud)
你好试试这个
<EditText
android:id="@+id/edt_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Hello World!"
android:cursorVisible="true"/>
Run Code Online (Sandbox Code Playgroud)
EditText editText = findViewById(R.id.editText);
editText.setSelection(editText.getText().length()); // End point光标
我需要此功能来EditText在我的笔记应用程序中提供多行支持。当用户导航到具有注释文本的片段时,我希望光标位于文本末尾。
djleop建议的解决方案很接近。但这样做的问题是,如果用户将光标放在文本中间的某个位置进行编辑并开始输入,光标将再次跳到文本末尾。发生这种情况是因为LiveData会发出新值,并且光标会再次跳到文本末尾,导致用户无法在中间某处编辑文本。
为了解决这个问题,我使用标志MediatorLiveData并为其分配仅一次的长度。String这将导致 LiveData 仅读取该值一次,即当用户导航到片段时。之后,用户可以将光标放置在他们想要编辑文本的任何位置。
视图模型
\n\nprivate var accessedPosition: Boolean = false\n\nval cursorPosition = MediatorLiveData<Event<Int>>().apply {\n addSource(yourObject) { value ->\n if(!accessedPosition) {\n setValue(Event(yourObject.note.length))\n accessedPosition = true\n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n这里yourObject是从数据库检索的另一个 LiveData,它保存您在EditText.
MediatorLiveData然后使用绑定适配器将其绑定到您的 EditText。
XML
\n\n使用双向数据绑定来显示文本以及接受文本输入。
\n\n<!-- android:text must be placed before cursorPosition otherwise we\'ll get IndexOutOfBounds exception-->\n<EditText\n android:text="@={viewModel.noteText}"\n cursorPosition="@{viewModel.cursorPosition}" />\nRun Code Online (Sandbox Code Playgroud)\n\n绑定适配器
\n\n@BindingAdapter("cursorPosition")\nfun bindCursorPosition(editText: EditText, event: Event<Int>?) {\n event?.getContentIfNotHandled()?.let { editText.setSelection(it) }\n}\nRun Code Online (Sandbox Code Playgroud)\n\nEvent班级
这里的类Event就像Google 的 Jose Alc\xc3\xa9rreca 编写的SingleLiveEvent。我在这里用它来处理屏幕旋转。使用单Event将确保当用户在中间某处编辑文本并且屏幕旋转时光标不会跳到文本末尾。当屏幕旋转时,它将保持相同的位置。
这是班级Event:
open class Event<out T>(private val content: T) {\n\n var hasBeenHandled = false\n private set // Allow external read but not write\n\n /**\n * Returns the content and prevents its use again.\n */\n fun getContentIfNotHandled(): T? {\n return if (hasBeenHandled) {\n null\n } else {\n hasBeenHandled = true\n content\n }\n }\n\n /**\n * Returns the content, even if it\'s already been handled.\n */\n fun peekContent(): T = content\n}\nRun Code Online (Sandbox Code Playgroud)\n\n这是适合我并提供良好用户体验的解决方案。希望它对您的项目也有帮助。
\n如果要选择所有文本,而只输入新文本而不是旧文本,则可以使用
android:selectAllOnFocus="true"
Run Code Online (Sandbox Code Playgroud)
小智 5
这有效
Editable etext = edittext.getText();
Selection.setSelection(etext,edittext.getText().toString().length());
Run Code Online (Sandbox Code Playgroud)
editText.setSelection是这里的魔力。基本上,选择可使您将光标放置在所需的任何位置。
EditText editText = findViewById(R.id.editText);
editText.setSelection(editText.getText().length());
Run Code Online (Sandbox Code Playgroud)
这会将光标置于EditText的末尾。基本上editText.getText().length()给您文本长度。然后,您可以使用setSelection长度。
editText.setSelection(0);
用于将光标设置在起始位置(0)。
| 归档时间: |
|
| 查看次数: |
263222 次 |
| 最近记录: |