Apakah ada yang tahu cara menonaktifkan kursor yang berkedip dalam EditText
tampilan?
Apakah ada yang tahu cara menonaktifkan kursor yang berkedip dalam EditText
tampilan?
Jawaban:
Anda dapat menggunakan atribut xml android:cursorVisible="false"
atau fungsi java setCursorVisible(false)
.
Solusi Sempurna yang melangkah lebih jauh ke tujuan
Sasaran: Menonaktifkan curser yang berkedip ketika EditText
tidak fokus, dan mengaktifkan curser yang berkedip ketika EditText
sedang dalam fokus. Di bawah ini juga buka keyboard saatEditText
diklik, dan menyembunyikannya saat Anda menekan selesai di keyboard.
1) Ditetapkan dalam xml Anda di bawah EditText
:
android:cursorVisible="false"
2) Set onClickListener:
iEditText.setOnClickListener(editTextClickListener);
OnClickListener editTextClickListener = new OnClickListener()
{
public void onClick(View v)
{
if (v.getId() == iEditText.getId())
{
iEditText.setCursorVisible(true);
}
}
};
3) lalu onCreate
, tangkap acara setelah selesai ditekan menggunakan OnEditorActionListener
untuk Anda EditText
, lalu setCursorVisible(false)
.
//onCreate...
iEditText.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId,
KeyEvent event) {
iEditText.setCursorVisible(false);
if (event != null&& (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) {
InputMethodManager in = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
in.hideSoftInputFromWindow(iEditText.getApplicationWindowToken(),InputMethodManager.HIDE_NOT_ALWAYS);
}
return false;
}
});
Anda dapat menggunakan kode berikut untuk mengaktifkan dan menonaktifkan kursor teks edit secara terprogram.
Untuk Mengaktifkan kursor
editText.requestFocus();
editText.setCursorVisible(true);
Untuk Menonaktifkan kursor
editText.setCursorVisible(false);
Menggunakan XML memungkinkan nonaktifkan kursor
android:cursorVisible="false/true"
android:focusable="false/true"
Untuk membuat edit_text Dapat dipilih untuk (salin / potong / tempel / pilih / pilih semua)
editText.setTextIsSelectable(true);
Untuk fokus pada mode sentuh, tulis baris berikut dalam XML
android:focusableInTouchMode="true"
android:clickable="true"
android:focusable="true"
secara terprogram
editText.requestFocusFromTouch();
Untuk menghapus fokus pada mode sentuh
editText.clearFocus()
Masalah dengan pengaturan visibilitas kursor ke true dan false mungkin menjadi masalah karena menghapus kursor hingga Anda mengaturnya lagi dan pada saat yang sama bidang dapat diedit yang bukan pengalaman pengguna yang baik.
jadi alih-alih menggunakan
setCursorVisible(false)
lakukan saja seperti ini
editText2.setFocusableInTouchMode(false)
editText2.clearFocus()
editText2.setFocusableInTouchMode(true)
Kode di atas menghilangkan fokus yang pada gilirannya menghilangkan kursor. Dan mengaktifkannya lagi sehingga Anda dapat menyentuhnya lagi dan dapat mengeditnya. Sama seperti pengalaman pengguna normal.
Dalam kasus saya, saya ingin mengaktifkan / menonaktifkan kursor ketika pengeditan difokuskan.
Dalam Aktivitas Anda:
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
View v = getCurrentFocus();
if (v instanceof EditText) {
EditText edit = ((EditText) v);
Rect outR = new Rect();
edit.getGlobalVisibleRect(outR);
Boolean isKeyboardOpen = !outR.contains((int)ev.getRawX(), (int)ev.getRawY());
System.out.print("Is Keyboard? " + isKeyboardOpen);
if (isKeyboardOpen) {
System.out.print("Entro al IF");
edit.clearFocus();
InputMethodManager imm = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(edit.getWindowToken(), 0);
}
edit.setCursorVisible(!isKeyboardOpen);
}
}
return super.dispatchTouchEvent(ev);
}
edit.setCursorVisible(!isKeyboardOpen);
menjadi edit.setCursorVisible(isKeyboardOpen);
sehingga kursor terlihat ketika keyboard hadir.
sederhana tambahkan baris ini ke tata letak induk Anda
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:focusable="true"
android:focusableInTouchMode="true">
<EditText
android:inputType="text"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
Jika Anda ingin mengabaikan Edittext
dari awal kegiatan, android:focusable
dan android:focusableInTouchMode
akan membantu Anda insya Allah.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linearLayout7" android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:focusable="true" android:focusableInTouchMode="true">
Ini
LinearLayout
dengan AndaEdittext
.
Ubah fokus ke tampilan lain (mis: Tayangan teks apa pun atau Linearlayout dalam XML) menggunakan
android:focusableInTouchMode="true"
android:focusable="true"
atur addTextChangedListener ke edittext di Activity.
dan kemudian setelah perubahan Edittext menempatkan edittext.clearFocus()
;
Ini akan memungkinkan kursor ketika keyboard terbuka dan menonaktifkan ketika keyboard ditutup.
Di kotlin your_edittext.isCursorVisible = false