There are two EditText
,while loading the page a text is set in the first EditText, So now cursor will be in the starting place of EditText
, I want to set cursor position in the second EditText which contains no data. How to do this?
问题:
回答1:
Where position is an int:
editText1.setSelection(position)
回答2:
I have done this way to set cursor position to end of the text after updating the text of EditText programmatically
here, etmsg
is EditText
etmsg.setText("Updated Text From another Activity");
int position = etmsg.length();
Editable etext = etmsg.getText();
Selection.setSelection(etext, position);
回答3:
How to Set EditText Cursor position in Android
Below Code is Set cursor to Starting in EditText
:
EditText editText = (EditText)findViewById(R.id.edittext_id);
editText.setSelection(0);
Below Code is Set cursor to end of the EditText
:
EditText editText = (EditText)findViewById(R.id.edittext_id);
editText.setSelection(editText.getText().length());
Below Code is Set cursor after some 2th Character position :
EditText editText = (EditText)findViewById(R.id.edittext_id);
editText.setSelection(2);
回答4:
I want to set cursor position in edittext which contains no data
There is only one position in an empty EditText, it's setSeletion(0)
.
Or did you mean you want to get focus to your EditText
when your activity opens? In that case its requestFocus()
回答5:
use the below line
e2.setSelection(e2.length());
e2
is edit text Object Name
回答6:
Let editText2 is your second EditText view .then put following piece of code in onResume()
editText2.setFocusableInTouchMode(true);
editText2.requestFocus();
or put
<requestFocus />
in your xml layout of the second EditText view.
回答7:
some time edit text cursor donot comes at particular position is if we directly use editText.setSelection(position);
.
In that case you can try
editText.post(new Runnable() {
@Override
public void run() {
editText.setSelection(string.length());
}
});
回答8:
setSelection(int index)
method in Edittext
should allow you to do this.
回答9:
as a reminder: if you are using edittext.setSelection()
to set the cursor, and it is NOT working while setting up an alertdialog
for example, make sure to set the selection()
AFTER the dialog has been created
example:
AlertDialog dialog = builder.show();
input.setSelection(x,y);
回答10:
This code will help you to show your cursor at the last position of editing text.
editText.requestFocus();
editText.setSelection(editText.length());
回答11:
Remember call requestFocus()
before setSelection
for edittext.
回答12:
I won't get setSelection() method directly , so i done like below and work like charm
EditText editText = (EditText)findViewById(R.id.edittext_id);
editText.setText("Updated New Text");
int position = editText.getText().length();
Editable editObj= editText.getText();
Selection.setSelection(editObj, position);
回答13:
If you want to set the cursor after n
character from
right to left then you have to do like this.
edittext.setSelection(edittext.length()-n);
If edittext's text like
version<sub></sub>
and you want to move cursor at 6th position from right
Then it will move the cursor at-
version<sub> </sub>
^
回答14:
If you want to place the cursor in a certain position on an EditText, you can use:
yourEditText.setSelection(position);
Additionally, there is the possibility to set the initial and final position, so that you programmatically select some text, this way:
yourEditText.setSelection(startPosition, endPosition);
Please note that setting the selection might be tricky since you can place the cursor before or after a character, the image below explains how to index works in this case:
So, if you want the cursor at the end of the text, just set it to yourEditText.length()
.
回答15:
Set cursor to a row and column
You can use the following code to get the position in your EditText that corresponds to a certain row and column. You can then use editText.setSelection(getIndexFromPos(row, column))
to set the cursor position.
The following calls to the method can be made:
getIndexFromPos(x, y)
Go to the column y of line xgetIndexFromPos(x, -1)
Go to the last column of line xgetIndexFromPos(-1, y)
Go to the column y of last linegetIndexFromPos(-1, -1)
Go to the last column of the last line
All line and column bounds are handled; Entering a column greater than the line's length will return position at the last column of the line. Entering a line greater than the EditText's line count will go to the last line. It should be reliable enough as it was heavily tested.
static final String LINE_SEPARATOR = System.getProperty("line.separator");
int getIndexFromPos(int line, int column) {
int lineCount = getTrueLineCount();
if (line < 0) line = getLayout().getLineForOffset(getSelectionStart()); // No line, take current line
if (line >= lineCount) line = lineCount - 1; // Line out of bounds, take last line
String content = getText().toString() + LINE_SEPARATOR;
int currentLine = 0;
for (int i = 0; i < content.length(); i++) {
if (currentLine == line) {
int lineLength = content.substring(i, content.length()).indexOf(LINE_SEPARATOR);
if (column < 0 || column > lineLength) return i + lineLength; // No column or column out of bounds, take last column
else return i + column;
}
if (String.valueOf(content.charAt(i)).equals(LINE_SEPARATOR)) currentLine++;
}
return -1; // Should not happen
}
// Fast alternative to StringUtils.countMatches(getText().toString(), LINE_SEPARATOR) + 1
public int getTrueLineCount() {
int count;
String text = getText().toString();
StringReader sr = new StringReader(text);
LineNumberReader lnr = new LineNumberReader(sr);
try {
lnr.skip(Long.MAX_VALUE);
count = lnr.getLineNumber() + 1;
} catch (IOException e) {
count = 0; // Should not happen
}
sr.close();
return count;
}
The question was already answered but I thought someone could want to do that instead.
It works by looping through each character, incrementing the line count every time it finds a line separator. When the line count equals the desired line, it returns the current index + the column, or the line end index if column is out of bounds. You can also reuse the getTrueLineCount()
method, it returns a line count ignoring text wrapping, unlike TextView.getLineCount()
.
回答16:
EditText editText = findViewById(R.id.editText);
editText.setSelection(editText.getText().length());
回答17:
If you want to set cursor position in EditText? try these below code
EditText rename;
String title = "title_goes_here";
int counts = (int) title.length();
rename.setSelection(counts);
rename.setText(title);
回答18:
In kotlin, you could create an extension function like this:
fun EditText.placeCursorAtLast() {
val string = this.text.toString()
this.setSelection(string.length)
}
and then simply call myEditText.placeCursorAtLast()
回答19:
I believe the most simple way to do this is just use padding.
Say in your xml's edittext section, add android:paddingLeft="100dp" This will move your start position of cursor 100dp right from left end.
Same way, you can use android:paddingRight="100dp" This will move your end position of cursor 100dp left from right end.
For more detail, check this article on my blog: Android: Setting Cursor Starting and Ending Position in EditText Widget
回答20:
In Xml file android:paddingLeft:
<EditText
android:id="@+id/txt_amount"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="10dp"/>
i hope this help you