EditText yanıp sönen imlecini devre dışı bırak


Yanıtlar:


355

Xml özniteliğini android:cursorVisible="false"veya java işlevini kullanabilirsiniz setCursorVisible(false).


13
Harika, bu görünür hale getirir onclicklistener ile birlikte doğru davranış verir :)
Warpzit

1
@cerin, yapıştırıcıyı devre dışı bırakabilmem için mavi işaretçiyi gizlemenin bir yolu var, ancak kullanıcı alanda nerede olduğunu görecek şekilde imleci görünür tutuyor mu?
limlim

9
İmleci değil, yalnızca yanıp sönmeyi devre dışı bırakmak mümkün müdür?
android geliştirici

35

Hedefe ilerleyen mükemmel çözüm

Hedef: EditTextOdaklanmadığında yanıp sönen imleci devre dışı bırakın ve odaktayken yanıp sönen imleci etkinleştirin EditText. Aşağıda ayrıca EditTexttıklandığında klavyeyi açar ve klavyede bitirdiğinizde gizler.

1) xml'nizi şunun altında ayarlayın EditText:

android:cursorVisible="false"

2) ClickListener'ı ayarlayın:

iEditText.setOnClickListener(editTextClickListener);

OnClickListener editTextClickListener = new OnClickListener() 

{

    public void onClick(View v) 
    {
         if (v.getId() == iEditText.getId()) 
        {
            iEditText.setCursorVisible(true);
        }

    }
};

3) Daha sonra onCreatekullanarak basıldığında bitti, olay yakalama OnEditorActionListeneradresinden Müşteri EditTextsonra ve 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 tüm klavyelerde çalışmaz. Düzende özellikle android: imeOptions = "actionDone" dan bahsetmeniz ve ardından EditorInfo.IME_ACTION_DONE ile başa çıkmanız gerekir.
PsyGik

Büyük cevap sadece dokunuşla tıklamanın yerini almalıdır, çünkü bir süre düzenleme metni tıklama olmadan odaklanmaya başlar, bu durumda imleç gösterilmez
Antwan

10

Düzenleme metin imlecini program aracılığıyla etkinleştirmek ve devre dışı bırakmak için aşağıdaki kodu kullanabilirsiniz.

İmleci etkinleştirmek için

    editText.requestFocus();
    editText.setCursorVisible(true);

İmleci devre dışı bırakmak için

    editText.setCursorVisible(false);

XML enable devre dışı bırakma imlecini kullanma

   android:cursorVisible="false/true"
   android:focusable="false/true"

Edit_text'i Seçilebilir yapmak için (kopyala / kes / yapıştır / seç / tümünü seç)

   editText.setTextIsSelectable(true);

Dokunmatik moda odaklanmak için XML'de aşağıdaki satırları yazın

  android:focusableInTouchMode="true"
  android:clickable="true"
  android:focusable="true" 

programlı

  editText.requestFocusFromTouch();

Dokunmatik moda odaklanmayı temizlemek için

  editText.clearFocus()

editText.clearFocus () aradığım şeydi. Teşekkürler!! +1
iUser

3

İmlecin görünürlüğünü true ve false olarak ayarlama sorunu bir sorun olabilir çünkü imleci tekrar ayarlayana kadar kaldırır ve aynı zamanda alan düzenlenebilir, bu da iyi bir kullanıcı deneyimi değildir.

yani kullanmak yerine

setCursorVisible(false)

sadece böyle yap

        editText2.setFocusableInTouchMode(false)
        editText2.clearFocus()
        editText2.setFocusableInTouchMode(true)

Yukarıdaki kod imleci kaldıran odağı kaldırır. Ve tekrar etkinleştirir, böylece ona tekrar dokunabilir ve düzenleyebilirsiniz. Tıpkı normal kullanıcı deneyimi gibi.


2

Benim durumumda, düzenleme odaklandığında imleci etkinleştirmek / devre dışı bırakmak istedim.

Faaliyetinizde:

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

Klavye mevcut olduğunda imlecin görünür edit.setCursorVisible(!isKeyboardOpen);olmasını istediğinizden emin olabilirsiniz edit.setCursorVisible(isKeyboardOpen);.
Daniel Storm

2

basitçe bu satırı ana düzeninize ekleyin

<?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

Eğer Edittextfaaliyetin başlangıcından itibaren göz ardı etmek istiyorsanız android:focusableve android:focusableInTouchModesize inşallah yardımcı olacaktır.

<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">

Bu LinearLayoutseninle Edittext.


0
  1. Kullanarak odağı başka bir görünüme değiştirin (ör: XML'de herhangi bir metin görünümü veya Doğrusal görünüm)

    android:focusableInTouchMode="true"
    android:focusable="true"
  2. addTextChangedListener öğesini Etkinlik'teki metni düzenlemeye ayarlayın.

  3. ve sonra Edittext put değiştirildikten sonra edittext.clearFocus();

Bu, klavye açıkken imleci etkinleştirir ve klavye kapatıldığında devre dışı bırakılır.


0

Kotlin'de your_edittext.isCursorVisible = false


Lütfen biçimlendirmeyi biçimlendirin. Kodu 4 boşluk girintiyle yapabilirsiniz.
Danon

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.