EditText ब्लिंकिंग कर्सर को अक्षम करें


जवाबों:


354

आप xml विशेषता android:cursorVisible="false"या जावा फ़ंक्शन का उपयोग कर सकते हैं setCursorVisible(false)


13
बहुत बढ़िया, यह onclicklistener के साथ मिलकर जो इसे दिखाई देता है वह सही व्यवहार देता है :)
Warpzit

1
@cerin नीले मार्कर को छिपाने का एक तरीका है इसलिए मैं पेस्ट को अक्षम कर सकता हूं, लेकिन कर्सर को दृश्यमान रखें ताकि उपयोगकर्ता यह देख सके कि वह मैदान में कहां है?
14

9
क्या सिर्फ पलक झपकना ही अक्षम करना संभव है, और कर्सर नहीं?
एंड्रॉइड डेवलपर

35

सही समाधान जो लक्ष्य तक आगे बढ़ता है

लक्ष्य: EditTextफोकस में न होने पर ब्लिंकिंग क्यूरर को अक्षम करें और फोकस में होने पर ब्लिंक करने वाले को सक्षम करें EditText। नीचे EditTextक्लिक किए जाने पर कीबोर्ड भी खुलता है, और जब आप कीबोर्ड में प्रेस करते हैं तो उसे छुपा देते हैं।

1) अपने xml में अपने तहत सेट करें EditText:

android:cursorVisible="false"

2) सेट onClickListener:

iEditText.setOnClickListener(editTextClickListener);

OnClickListener editTextClickListener = new OnClickListener() 

{

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

    }
};

3) तब onCreate, उस घटना पर कब्जा करें जब किया हुआ OnEditorActionListenerआपके EditTextऔर फिर का उपयोग करके दबाया जाता है 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 सभी कीबोर्ड के लिए काम नहीं करेगा। आपको विशेष रूप से Android: imeOptions = "actionDone" लेआउट में उल्लेख करना होगा और उसके बाद EditorInfo.IME_ACTION_DONE को भी संभालना होगा।
PsyGik

महान उत्तर को बस क्लिक पर स्पर्श से प्रतिस्थापित करना चाहिए क्योंकि कुछ समय पाठ लाभ को क्लिक के बिना संपादित करता है इसलिए इस मामले में कर्सर दिखाई नहीं देगा
एंटवान

10

प्रोग्रामेटिक रूप से एडिट टेक्स्ट कर्सर को सक्षम और अक्षम करने के लिए आप निम्न कोड का उपयोग कर सकते हैं।

कर्सर को सक्षम करने के लिए

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

कर्सर को निष्क्रिय करने के लिए

    editText.setCursorVisible(false);

XML का उपयोग कर कर्सर को निष्क्रिय करें

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

Edit_text का चयन करने के लिए (कॉपी / कट / पेस्ट / चयन / सभी का चयन करें)

   editText.setTextIsSelectable(true);

XML में टच मोड लिखने के लिए निम्न पंक्तियों पर ध्यान दें

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

प्रोग्राम के रूप में

  editText.requestFocusFromTouch();

स्पर्श मोड पर ध्यान केंद्रित करने के लिए

  editText.clearFocus()

editText.clearFocus () वही है जिसकी मुझे तलाश थी। धन्यवाद!! +1
iUser

3

कर्सर की दृश्यता को सही और गलत पर सेट करने में समस्या हो सकती है क्योंकि यह कर्सर को तब तक हटाता है जब तक आप इसे फिर से सेट नहीं करते हैं और उसी समय फ़ील्ड संपादन योग्य होता है जो अच्छा उपयोगकर्ता अनुभव नहीं है।

इसलिए उपयोग करने के बजाय

setCursorVisible(false)

बस इसे ऐसे ही करो

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

उपरोक्त कोड फोकस को हटाता है जो बदले में कर्सर को हटाता है। और इसे फिर से सक्षम बनाता है ताकि आप फिर से इसे छू सकें और इसे संपादित करने में सक्षम हो सकें। सामान्य उपयोगकर्ता अनुभव की तरह।


2

मेरे मामले में, मैं कर्सर को सक्षम / अक्षम करना चाहता था जब संपादन केंद्रित होता है।

आपकी गतिविधि में:

@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);होने के लिए edit.setCursorVisible(isKeyboardOpen);इतना है कि कर्सर दिखाई देता है जब कीबोर्ड मौजूद है।
डैनियल स्टॉर्म

2

सरल इस लाइन को अपने मूल लेआउट में जोड़ें

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

यदि आप Edittextगतिविधि की शुरुआत से अनदेखा करना चाहते हैं , android:focusableऔर android:focusableInTouchModeआपकी मदद करेंगे।

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

यह LinearLayoutअपने साथ Edittext


0
  1. फ़ोकस को दूसरे दृश्य में बदलें (उदा: XML में कोई भी टेक्स्टव्यू या लिनलेरेलआउट)

    android:focusableInTouchMode="true"
    android:focusable="true"
  2. AddTextChangedListener को गतिविधि में Edittext पर सेट करें।

  3. और उसके बाद Edittext put के बंद होने पर edittext.clearFocus();

यह कीबोर्ड के खुलने पर अक्षम हो जाएगा और कीबोर्ड बंद होने पर अक्षम हो जाएगा।


0

कोटलिन में your_edittext.isCursorV अदृश्य = गलत


कृपया, मार्कअप प्रारूपित करें। आप ऐसा कर सकते हैं कि कोड को 4 स्थानों से इंडेंट करके।
डैनॉन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.