Ada dua EditText
, saat memuat halaman teks diatur dalam EditText pertama, Jadi sekarang kursor akan berada di tempat awal EditText
, saya ingin mengatur posisi kursor di EditText kedua yang tidak mengandung data. Bagaimana cara melakukannya?
Ada dua EditText
, saat memuat halaman teks diatur dalam EditText pertama, Jadi sekarang kursor akan berada di tempat awal EditText
, saya ingin mengatur posisi kursor di EditText kedua yang tidak mengandung data. Bagaimana cara melakukannya?
Jawaban:
Di mana posisi adalah int:
editText1.setSelection(position)
Saya telah melakukan cara ini untuk mengatur posisi kursor ke akhir teks setelah memperbarui teks dari EditText secara terprogram di
sini, etmsg
adalah EditText
etmsg.setText("Updated Text From another Activity");
int position = etmsg.length();
Editable etext = etmsg.getText();
Selection.setSelection(etext, position);
etmsg.setText("my new text..."); etmsg.setSelection(etmsg.length());
Kode di bawah ini Setel kursor ke Mulai di EditText
:
EditText editText = (EditText)findViewById(R.id.edittext_id);
editText.setSelection(0);
Di bawah Kode Set kursor untuk mengakhiri dari EditText
:
EditText editText = (EditText)findViewById(R.id.edittext_id);
editText.setSelection(editText.getText().length());
Kode di bawah ini adalah Tetapkan kursor setelah beberapa posisi Karakter 2:
EditText editText = (EditText)findViewById(R.id.edittext_id);
editText.setSelection(2);
Saya ingin mengatur posisi kursor dalam edittext yang tidak mengandung data
Hanya ada satu posisi di EditText kosong, itu setSelection(0)
.
Atau apakah Anda maksudnya ingin fokus ke EditText
aktivitas Anda saat aktivitas dibuka? Dalam hal ini requestFocus()
gunakan baris di bawah ini
e2.setSelection(e2.length());
e2
adalah edit Nama Objek teks
Biarkan editText2 adalah tampilan EditText kedua Anda. Lalu masukkan potongan kode berikut di onResume ()
editText2.setFocusableInTouchMode(true);
editText2.requestFocus();
atau dimasukkan
<requestFocus />
dalam tata letak xml Anda dari tampilan EditText kedua.
beberapa saat edit kursor teks donot datang pada posisi tertentu adalah jika kita langsung menggunakan editText.setSelection(position);
. Dalam hal ini Anda dapat mencoba
editText.post(new Runnable() {
@Override
public void run() {
editText.setSelection(string.length());
}
});
Jika Anda ingin meletakkan kursor pada posisi tertentu pada EditText, Anda dapat menggunakan:
yourEditText.setSelection(position);
Selain itu, ada kemungkinan untuk mengatur posisi awal dan akhir, sehingga Anda secara terprogram memilih beberapa teks, dengan cara ini:
yourEditText.setSelection(startPosition, endPosition);
Harap perhatikan bahwa pengaturan pilihan mungkin rumit karena Anda dapat menempatkan kursor sebelum atau setelah karakter, gambar di bawah ini menjelaskan cara indeks berfungsi dalam kasus ini:
Jadi, jika Anda menginginkan kursor di akhir teks, cukup setel ke yourEditText.length()
.
Kode ini akan membantu Anda menampilkan kursor di posisi terakhir mengedit teks.
editText.requestFocus();
editText.setSelection(editText.length());
Ingat panggilan requestFocus()
sebelumnya setSelection
untuk edittext.
Saya tidak akan mendapatkan metode setSelection () secara langsung, jadi saya selesai seperti di bawah ini dan bekerja seperti pesona
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);
Jika Anda ingin mengatur kursor setelah n
karakter dari kanan ke kiri maka Anda harus melakukan seperti ini.
edittext.setSelection(edittext.length()-n);
Jika teks edittext suka
version<sub></sub>
dan Anda ingin memindahkan kursor di posisi ke-6 dari kanan
Maka itu akan memindahkan kursor di-
version<sub> </sub>
^
EditText editText = findViewById(R.id.editText);
editText.setSelection(editText.getText().length());
Anda dapat menggunakan kode berikut untuk mendapatkan posisi di EditText Anda yang sesuai dengan baris dan kolom tertentu. Anda kemudian dapat menggunakan editText.setSelection(getIndexFromPos(row, column))
untuk mengatur posisi kursor. Panggilan ke metode ini dapat dilakukan:
getIndexFromPos(x, y)
Pergi ke kolom y dari baris xgetIndexFromPos(x, -1)
Pergi ke kolom terakhir dari baris xgetIndexFromPos(-1, y)
Pergi ke kolom y dari baris terakhirgetIndexFromPos(-1, -1)
Pergi ke kolom terakhir dari baris terakhirSemua batas baris dan kolom ditangani; Memasuki kolom yang lebih besar dari panjang garis akan mengembalikan posisi di kolom terakhir dari garis. Memasukkan baris yang lebih besar dari jumlah baris EditText akan menuju ke baris terakhir. Itu harus cukup andal karena sedang diuji berat.
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;
}
Pertanyaannya sudah dijawab tetapi saya pikir seseorang bisa melakukan itu.
Ini bekerja dengan mengulangi setiap karakter, menambah jumlah baris setiap kali menemukan pemisah baris. Ketika jumlah baris sama dengan baris yang diinginkan, itu mengembalikan indeks saat ini + kolom, atau indeks akhir baris jika kolom di luar batas. Anda juga dapat menggunakan kembali getTrueLineCount()
metode ini, ia mengembalikan jumlah baris mengabaikan pembungkus teks, tidak seperti TextView.getLineCount()
.
Jika Anda ingin mengatur posisi kursor di EditText? coba kode di bawah ini
EditText rename;
String title = "title_goes_here";
int counts = (int) title.length();
rename.setSelection(counts);
rename.setText(title);
Cara mengatasi masalah posisi kursor yang secara otomatis pindah ke posisi terakhir setelah memformat di US Mobile seperti (xxx) xxx-xxxx di Android.
private String oldText = "";
private int lastCursor;
private EditText mEtPhone;
@Override
public void afterTextChanged(Editable s) {
String cleanString = AppUtil.cleanPhone(s.toString());
String format = cleanString.length() < 11 ? cleanString.replaceFirst("(\\d{3})(\\d{3})(\\d+)", "($1) $2-$3") :
cleanString.substring(0, 10).replaceFirst("(\\d{3})(\\d{3})(\\d+)", "($1) $2-$3");
boolean isDeleted = format.length() < oldText.length();
try {
int cur = AppUtil.getPointer(lastCursor, isDeleted ? s.toString() : format, oldText, isDeleted);
mEtPhone.setSelection(cur > 0 ? cur : format.length());
}catch (Exception e){
e.printStackTrace();
mEtPhone.setSelection(format.length());
}
mEtPhone.addTextChangedListener(this);
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
oldText = s.toString();
lastCursor = start;
}
Tetapkan metode di bawah ini untuk setiap kelas aktivitas dalam kasus saya. Nama aktivitas adalah AppUtil dan akses secara global
public static int getPointer(int index, String newString, String oldText, boolean isDeleted){
int diff = Math.abs(newString.length() - oldText.length());
return diff > 1 ? isDeleted ? index - diff : index + diff : isDeleted ? index : index + 1;
}
public static String cleanPhone(String phone){
if(TextUtils.isEmpty(phone))
return "";
StringBuilder sb = new StringBuilder();
for(char c : phone.toCharArray()){
if(Character.isDigit(c))
sb.append(c);
}
return sb.toString();
}
Dan jika Anda ingin mengatur posisi tertentu
edittext.setSelection(position);
Saya percaya cara paling sederhana untuk melakukan ini hanya menggunakan bantalan.
Katakan di bagian edittext xml Anda, tambahkan android: paddingLeft = "100dp" Ini akan memindahkan posisi awal Anda dari kursor 100dp langsung dari ujung kiri.
Cara yang sama, Anda dapat menggunakan android: paddingRight = "100dp" Ini akan memindahkan posisi akhir Anda dari kursor 100dp ke kiri dari ujung kanan.
Untuk detail lebih lanjut, lihat artikel ini di blog saya : Android: Mengatur Kursor Memulai dan Mengakhiri Posisi di Widget EditText