Nonaktifkan kursor EditText yang berkedip


Jawaban:


355

Anda dapat menggunakan atribut xml android:cursorVisible="false"atau fungsi java setCursorVisible(false).


13
Luar biasa, ini bersama dengan onclicklistener yang membuatnya terlihat memberikan perilaku yang benar :)
Warpzit

1
@cerin apakah ada cara untuk menyembunyikan penanda biru sehingga saya dapat menonaktifkan tempel, tetapi biarkan kursor tetap terlihat sehingga pengguna akan melihat di mana dia berada di lapangan?
limlim

9
Apakah mungkin untuk menonaktifkan hanya kedipan itu sendiri, dan bukan kursor?
pengembang android

35

Solusi Sempurna yang melangkah lebih jauh ke tujuan

Sasaran: Menonaktifkan curser yang berkedip ketika EditTexttidak fokus, dan mengaktifkan curser yang berkedip ketika EditTextsedang 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 OnEditorActionListeneruntuk 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;
            }
        });

6
KeyEvent.KEYCODE_ENTER tidak akan berfungsi untuk semua keyboard. Anda harus menyebutkan secara khusus android: imeOptions = "actionDone" di tata letak dan kemudian menangani juga EditorInfo.IME_ACTION_DONE.
PsyGik

Jawaban yang bagus hanya harus mengganti klik dengan sentuhan karena beberapa waktu mengedit fokus memperoleh teks tanpa di klik sehingga dalam hal ini kursor tidak akan ditampilkan
Antwan

10

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()

editText.clearFocus () adalah apa yang saya cari. Terima kasih!! +1
iUser

3

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.


2

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);
}

Cukup yakin Anda ingin edit.setCursorVisible(!isKeyboardOpen);menjadi edit.setCursorVisible(isKeyboardOpen);sehingga kursor terlihat ketika keyboard hadir.
Daniel Storm

2

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>

1

Jika Anda ingin mengabaikan Edittextdari awal kegiatan, android:focusabledan android:focusableInTouchModeakan 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 LinearLayoutdengan Anda Edittext.


0
  1. Ubah fokus ke tampilan lain (mis: Tayangan teks apa pun atau Linearlayout dalam XML) menggunakan

    android:focusableInTouchMode="true"
    android:focusable="true"
  2. atur addTextChangedListener ke edittext di Activity.

  3. dan kemudian setelah perubahan Edittext menempatkan edittext.clearFocus();

Ini akan memungkinkan kursor ketika keyboard terbuka dan menonaktifkan ketika keyboard ditutup.


0

Di kotlin your_edittext.isCursorVisible = false


Tolong, format markup. Anda dapat melakukannya dengan memasukkan kode sebanyak 4 spasi.
Danon
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.