etmsg.setText("Updated Text From another Activity");
int position = etmsg.length();
Editable etext = etmsg.getText();
Selection.setSelection(etext, position);
5
我不会直接得到setSelection()方法,所以我像下面这样做,像魅力一样工作
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);
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;
}
20 回答
空的EditText中只有一个位置,它是setSeletion(0) .
或者你的意思是当你的活动开启时你想要关注你的
EditText
?在那种情况下它requestFocus()使用以下行
e2
是编辑文本对象名称让editText2是你的第二个EditText视图 . 然后在 onResume() 中放入以下代码片段
或者说
在第二个EditText视图的xml布局中 .
有些时候编辑文本光标donot来自特定位置,如果我们直接使用
editText.setSelection(position);
. 在这种情况下,你可以尝试Edittext
中的setSelection(int index)
方法应该允许您这样做 .提醒:如果您正在使用
edittext.setSelection()
设置光标,并且在设置alertdialog
时它不起作用,请确保在创建对话框后设置selection()
例:
此代码将帮助您将光标显示在编辑文本的最后位置 .
如何在Android中设置EditText光标位置
以下代码是 Set cursor to Starting 在
EditText
:以下代码是
EditText
的 Set cursor to end :下面的代码是在第2个字符位置后设置光标:
请记住在
setSelection
之前为edittext调用requestFocus()
.其中position是int:
在这里以编程方式更新EditText的文本后,我已经这样做了将光标位置设置为文本的结尾,
etmsg
是EditText如果你想从右到左设置
n
字符之后的光标,那么你必须这样做 .如果是edittext的文字就好
并且您想要将光标从右侧移动到第6个位置
然后它会移动光标 -
将光标设置为行和列
您可以使用以下代码获取EditText中与某个行和列对应的位置 . 然后,您可以使用
editText.setSelection(getIndexFromPos(row, column))
设置光标位置 . 可以对以下方法进行调用:getIndexFromPos(x, y)
转到第x行的第y列getIndexFromPos(x, -1)
转到第x行的最后一列getIndexFromPos(-1, y)
转到最后一行的y列getIndexFromPos(-1, -1)
转到最后一行的最后一列处理所有行和列边界;输入大于行长度的列将返回该行最后一列的位置 . 输入大于EditText行数的行将转到最后一行 . 它应该足够可靠,因为它经过了大量测试 .
这个问题已经回答了,但我认为有人可能想要这样做 .
它通过循环遍历每个字符来工作,每次找到行分隔符时递增行计数 . 当行计数等于所需的行时,它返回列的当前索引,如果列超出范围,则返回行结束索引 . 您还可以重用
getTrueLineCount()
方法,它返回一个忽略文本换行的行数,与TextView.getLineCount()
不同 .如果要在EditText中设置光标位置?试试以下代码
如果要将光标放在EditText上的某个位置,可以使用:
此外,还可以设置初始位置和最终位置,以便以编程方式选择一些文本,这样:
请注意,设置选择可能会很棘手,因为您可以将光标放在字符之前或之后,下图说明了在这种情况下如何编制索引:
因此,如果您希望光标位于文本末尾,只需将其设置为
yourEditText.length()
即可 .在kotlin中,您可以创建一个这样的扩展函数:
然后简单地调用
myEditText.placeCursorAtLast()
在Xml文件中android:paddingLeft:
我希望这能帮助你
我相信最简单的方法就是使用填充 .
在xml的edittext部分中说,添加android:paddingLeft =“100dp”这将从右端开始移动光标100dp的起始位置 .
同样的方法,您可以使用android:paddingRight =“100dp”这将从右端移动光标100dp的结束位置 .
有关更多详细信息,请在我的博客上查看此文章:Android: Setting Cursor Starting and Ending Position in EditText Widget