कैसे संपादित पाठ बनाने के लिए नहीं संपादन योग्य है, लेकिन JAVA में क्लिक करने योग्य है


91

क्या EditTextक्लिक करने योग्य है लेकिन संपादन योग्य नहीं है।

मैं नहीं चाहता कि यह संपादन योग्य हो (न तो कीबोर्ड ऊपर आना चाहिए और न ही हमें संकेत बदलने में सक्षम होना चाहिए)

वास्तव में मैं केवल एक संकेत के साथ एक छवि के रूप में संपादित पाठ का उपयोग करना चाहता हूं (जिसे बदला नहीं जा सकता)। मुझे पता है कि वास्तविक तरीका एक ImageViewऔर एक का उपयोग करना था TextView, लेकिन मैं चाहता हूं कि मैं इसके साथ प्रयास EditTextकरूं क्योंकि मैं 2 के बजाय केवल एक दृश्य का उपयोग करूंगा। प्रत्येक चीज गतिशील है इसलिए कोई एक्सएमएल नहीं।

उपरोक्त आवश्यकता के लिए XML में समाधान है, android:editable="false"लेकिन मैं जावा में इसका उपयोग करना चाहता हूं।

परंतु,

अगर मैं उपयोग करता हूं: -

et.setEnabled(false);

या

 et.setKeyListener(null);

यह EditTextउल्लेखनीय नहीं है, लेकिन साथ ही यह इसे गैर क्लिक करने योग्य भी बनाता है।


सेटिंग के बारे में कैसे et.setClickable(true)? यह काम हो सकता है।
हेन डिक

पहले से ही कोशिश की .... लेकिन काम नहीं किया ... किसी भी अन्य विचार
आमिर शाह 13

1
शायद रिश्तेदार लेआउट का उपयोग करने की कोशिश करें और एडिटटेक्स्ट के ऊपर एक खाली आयत या कुछ डालें, और रेक्ट पर क्लिक करने योग्य चीज़ को
आज़माएं

जवाबों:


168

यहाँ चाल है: -

et.setFocusable(false);
et.setClickable(true);

5
लेकिन अगर आपने किसी भी क्षेत्र से कुछ मूल्य की नकल की है तो आप लैंग टैप और पेस्ट को दबाकर उस मूल्य को सुन सकते हैं .. किसी भी विचार को कैसे हटाएं
ऋषभ अग्रवाल

11
@ANJJ आप लंबे क्लिक करने योग्य को गलत पर सेट कर सकते हैं, अर्थात्, et.setLongClickable (गलत);
लुइस

हम्म, कर्सर को क्लिक / लॉन्गक्लिक पर एक अजीब तरीके से हाइलाइट किया गया है ... लेकिन मेरे पास बेहतर तरीका नहीं है। : /
मार्टिन फ़ाफ़र

1
उत्तम! आपको कॉपी / पेस्ट से बचने के लिए et.setLongClickable (गलत) जोड़ने की आवश्यकता हो सकती है
thanhbinh84

1
बिल्कुल सही, क्या आप डॉक्टर हैं?
इमान मराशी

22

आप EditTextफॉलिंग के रूप में जावा कोड का उपयोग करके सेट कर सकते हैं : -

edittext.setFocusable(false);
edittext.setClickable(true);

या के लिए XML फ़ाइल में नीचे दिए गए कोड का उपयोग करके EditText

android:editable="false" 
android:inputType="none"  

22

जैसा editableकि वंचित है। आप उपयोग कर सकते हैं android:inputTypeके रूप में कोई भी डिजाइन एक्सएमएल में या के रूप में InputType.TYPE_NULL कोडिंग में।

XML डिजाइनिंग

<android.support.v7.widget.AppCompatEditText
    android:id="@+id/edt"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:clickable="true"
    android:focusable="false"
    android:inputType="none"
    android:text="EditText"/>

कोडिंग

edt.setClickable(true);
edt.setFocusable(false);
edt.setInputType(InputType.TYPE_NULL);

और नीचे क्लिक की घटना है edittext

edt.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Toast.makeText(YourActivity.this,"edt click", Toast.LENGTH_LONG).show();
    }
});

मेरे लिए एक आकर्षण की तरह काम किया
करीम बिबर्स

8

आप इस का उपयोग कर सकते हैं ..

android:focusableInTouchMode="false"

संपादित करने के लिए xml में संपादन योग्य नहीं है। और क्लिक करने योग्य घटना के लिए आप setOnTouchListener () घटना का उपयोग उसी तरह कर सकते हैं जैसे कि ..

editText.setOnTouchListener(new OnTouchListener() {

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        // TODO Auto-generated method stub
                        //do your stuff here..
        return false;
    }
});

1
ऐसा लगता है कि Android O में android:focusableInTouchMode="false"भी ( android:focusable="false"अकेले काम नहीं करता है) DP2 में कम से कम आवश्यक है।
xip

7

android:editable वंचित है, लेकिन आप नीचे की तरह एसटीजी कर सकते हैं:

android:editable="false"
android:focusable="false"
android:focusableInTouchMode="false"

मैंने एडिटेक्सट के लिए ऊपर के कैड का उपयोग किया, जिसमें मैं डेटा सेट करने के लिए पिकर का उपयोग करता हूं। आप इसके साथ इनपुट लेआउट का उपयोग कर सकते हैं।


7

Edittext इस तरह से संपादन के लिए सक्षम और अक्षम करें

EditText edit = (EditText) findviewby(R.id.edittext);

जावा कोड के माध्यम से

edit.setEnabled(false); //non editable
edit.setEnabled(true); //editable

Xml के माध्यम से

<EditText
    android:id="@+id/otp_mpin"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:editable="false"
    android:focusable="false"/>

0

मेरे लिए जवाबों में से कोई भी पूरी तरह से काम करने वाले समाधान के परिणामस्वरूप नहीं था।

मेरे फिक्स का शोकेस https://www.youtube.com/watch?v=oUA4Cuxfdqc

गाइड (noob-friendly) , कृपया कोड में कुछ टिप्पणियों पर ध्यान दें।

EditTextDispatched.javaEditText नामक एक कस्टम के लिए एक जावा वर्ग बनाएँ

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.RelativeLayout;

/**
 * @author Martin Pfeffer
 * @see <a href="https://celox.io">https://celox.io</a>
 */
public class EditTextDispatched extends android.support.v7.widget.AppCompatEditText {

    private static final String TAG = "DispatchingEditText";

    private boolean editable = true;

    public EditTextDispatched(Context context) {
        super(context);
    }

    public EditTextDispatched(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public EditTextDispatched(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    // get the current state
    public boolean isEditable() {
        return editable;
    }

    // set your desired behaviour
    public void setEditable(boolean editable) {
        this.editable = editable;
    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent motionEvent) {

        if (editable) {
            // default behaviour of an EditText
            super.dispatchTouchEvent(motionEvent);
            return true;
        }

        // achieve the click-behaviour of a TextView (it's cuztom)
        ((RelativeLayout) getParent()).onTouchEvent(motionEvent);
        return true;
    }

}

EditTextDispatchedआपके xml में संदर्भ (आपको pgk-name को बदलना होगा):

  <io.celox.brutus.EditTextDispatched
    android:id="@+id/row_field_value"
    style="@style/row_field_text_display"
    android:layout_alignParentBottom="true"
    android:text="@string/sample_field_value" />

आह्वान करने के लिए:

private void changeEditTextBehaviour(EditTextDispatched value, boolean editable) {
    value.setEditable(editable);
    value.setEnabled(editable);
}


0

मुझे पता है कि इस सवाल का जवाब पहले ही दिया जा चुका है, लेकिन अनुरोध (यानी गैर-इनपुट या संपादन योग्य) प्रभाव को प्राप्त करने के लिए मेरे द्वारा उपयोग किया जाने वाला सेटअप (यानी 2018) उत्तर यहां है:

    val etUserLoc: EditText = themedEditText(R.style.Pale_Blue_Text_Bold_13) {
                id = R.id.et_comp_user_keys_var_user_location
                inputType = InputType.TYPE_NULL
                isClickable = true
                isFocusable = false
                textColor = resources.getColor(R.color.magenta)  // overrides the default theme color
                text = Editable.Factory.getInstance().newEditable(resources.getString(R.string.loc_swakopmund))
            }.lparams(width = matchConstraint, height = matchParent) {   }

हां, यह ANKO है क्योंकि मैं अब अपने किसी भी Android प्रोजेक्ट में XML का उपयोग नहीं करता हूं। 'InputType' 'IsEitable' डिप्रेचर का ध्यान रखता है।


0

2020 तक, अगर आप भी एक्सेसिबिलिटी की परवाह करते हैं, तो आपको सेटिंग et.setFocusable(false);से बचना चाहिए क्योंकि इससे कीबोर्ड नेविगेशन का उपयोग करके एडिटटेक्स्ट दोबारा उपलब्ध नहीं होगा।

यहाँ मेरा समाधान है:

Kotlin

editText.isFocusableInTouchMode = false

editText.isLongClickable = false //this will prevent copy and paste

editText.setOnClickListener {
   // handle the click
   // this will automatically make the edittext clickable = true
}

-1

आप android:inputMethod="@null"अपने में भी कर सकते हैं EditTextऔर यह कर्सर या कीबोर्ड नहीं दिखाएगा और फिर आप आसानी से सेटिंग श्रोता के माध्यम से क्लिक को समझ सकते हैं।

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