खोज…


EditTexts के साथ काम करना

EditText Android ऐप्स में मानक टेक्स्ट एंट्री विजेट है। यदि उपयोगकर्ता को किसी ऐप में टेक्स्ट दर्ज करने की आवश्यकता है, तो यह उनके लिए ऐसा करने का प्राथमिक तरीका है।

लिखाई में बदलाव

कई महत्वपूर्ण गुण हैं जिन्हें एक EditText के व्यवहार को अनुकूलित करने के लिए सेट किया जा सकता है। इनमें से कई नीचे सूचीबद्ध हैं। अधिक इनपुट फ़ील्ड विवरण के लिए आधिकारिक पाठ फ़ील्ड मार्गदर्शिका देखें।

प्रयोग

निम्नलिखित XML के साथ सभी डिफ़ॉल्ट व्यवहारों के साथ एक EditText को एक लेआउट में जोड़ा जाता है:

<EditText
    android:id="@+id/et_simple"
    android:layout_height="wrap_content"
    android:layout_width="match_parent">
</EditText>

ध्यान दें कि एक EditText केवल TextView का एक पतला विस्तार है और सभी समान गुणों को विरासत में मिला है।

मान प्राप्त करना

एक EditText में दर्ज पाठ का मूल्य प्राप्त करना इस प्रकार है:

EditText simpleEditText = (EditText) findViewById(R.id.et_simple);
String strValue = simpleEditText.getText().toString();

आगे प्रवेश अनुकूलन

हम पाठ की एकल-पंक्ति में प्रविष्टि को सीमित करना चाहते हैं (newlines से बचें):

<EditText
  android:singleLine="true"
  android:lines="1"
/>

आप उन वर्णों को सीमित कर सकते हैं जो अंकों की विशेषता का उपयोग करके किसी फ़ील्ड में दर्ज किए जा सकते हैं:

<EditText
  android:inputType="number"
  android:digits="01"
/>

यह केवल "0" और "1" में दर्ज अंकों को प्रतिबंधित करेगा। हम निम्न वर्णों की कुल संख्या को सीमित करना चाहते हैं:

<EditText
  android:maxLength="5"
/>

इन गुणों का उपयोग करके हम पाठ क्षेत्रों के लिए अपेक्षित इनपुट व्यवहार को परिभाषित कर सकते हैं।

रंगों का समायोजन

आप android:textColorHighlight साथ एक EditText के भीतर चयनित पाठ के हाइलाइट पृष्ठभूमि रंग को समायोजित कर सकते हैं: android:textColorHighlight संपत्ति:

<EditText
    android:textColorHighlight="#7cff88"
/>

प्लेसहोल्डर संकेत प्रदर्शित करना

आप विशिष्ट इनपुट के लिए उपयोगकर्ता को संकेत देने के लिए EditText नियंत्रण के लिए संकेत सेट करना चाह सकते हैं:

<EditText
    ...
    android:hint="@string/my_hint">
</EditText>

संकेत

नीचे की रेखा का रंग बदलना

मान लें कि आप AppCompat लाइब्रेरी का उपयोग कर रहे हैं, तो आप शैलियों को ओवरराइड कर सकते हैं कलरकंट्रोलनॉर्मल, कलरकंट्रोल एक्टीवेटेड, और कलरकंट्रोलहिघलाइट:

<style name="Theme.App.Base" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorControlNormal">#d32f2f</item>
    <item name="colorControlActivated">#ff5722</item>
    <item name="colorControlHighlight">#f44336</item>
</style>

यदि आप डायलॉगफ्रैगमेंट के भीतर लागू इन शैलियों को नहीं देखते हैं, तो एक ज्ञात बग है, जब लेआउटइन्फ़्लैटर का उपयोग ऑनक्रीट व्यू () विधि में किया गया है।

यह समस्या पहले ही AppCompat v23 लाइब्रेरी में ठीक हो चुकी है। नवीनीकरण करने के तरीके के बारे में यह मार्गदर्शिका देखें। एक और अस्थाई वर्कअर्न ऑनक्रीट व्यू () विधि में पारित होने के बजाय एक्टिविटी के लेआउट इनफ्लोटर का उपयोग करना है:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = getActivity().getLayoutInflater().inflate(R.layout.dialog_fragment, container);
  }

EditText इनपुट के लिए सुन रहा है

बुनियादी घटना श्रोताओं की जाँच करें कि कैसे एक EditText में परिवर्तन के लिए सुनने के लिए एक नज़र के लिए cliffnotes और जब कोई परिवर्तन होता है तो एक क्रिया करें।

फ्लोटिंग लेबल फीडबैक प्रदर्शित करना

उपयोगकर्ता टाइप करने के बाद परंपरागत रूप से, EditText संकेत संदेश (ऊपर समझाया गया) छुपाता है। इसके अलावा, किसी भी सत्यापन त्रुटि संदेश को डेवलपर द्वारा मैन्युअल रूप से प्रबंधित किया जाना था।

TextInputLayout साथ आप संकेत और त्रुटि संदेश प्रदर्शित करने के लिए एक अस्थायी लेबल सेटअप कर सकते हैं। आप यहां अधिक विवरण पा सकते हैं।

InputType को कस्टमाइज़ करना

टेक्स्ट फ़ील्ड में अलग-अलग इनपुट प्रकार हो सकते हैं, जैसे संख्या, दिनांक, पासवर्ड या ईमेल पता। प्रकार यह निर्धारित करता है कि फ़ील्ड के अंदर किस प्रकार के वर्णों की अनुमति है, और अक्सर उपयोग किए जाने वाले वर्णों के लिए अपने लेआउट को अनुकूलित करने के लिए वर्चुअल कीबोर्ड को संकेत दे सकता है।

डिफ़ॉल्ट रूप से, एक EditText नियंत्रण के भीतर किसी भी पाठ सामग्री को सादे पाठ के रूप में प्रदर्शित किया जाता है। इनपुट inputType विशेषता सेट करके, हम विभिन्न प्रकार की जानकारी के इनपुट की सुविधा दे सकते हैं, जैसे फ़ोन नंबर और पासवर्ड:

<EditText
    ...
    android:inputType="phone">
</EditText>

अधिकांश आम इनपुट प्रकारों में शामिल हैं:

प्रकार विवरण
Texturi वह पाठ जिसका उपयोग URI के रूप में किया जाएगा
textEmailAddress वह पाठ जिसका उपयोग ई-मेल पते के रूप में किया जाएगा
textPersonName पाठ जो किसी व्यक्ति का नाम है
textPassword पाठ जो एक पासवर्ड है जिसे अस्पष्ट किया जाना चाहिए
संख्या एक मात्र क्षेत्र
फ़ोन एक फ़ोन नंबर दर्ज करने के लिए
दिनांक एक तारीख दर्ज करने के लिए
समय एक समय में प्रवेश करने के लिए
textMultiLine क्षेत्र में पाठ की कई पंक्तियों को अनुमति दें

android:inputType आपको कुछ कुंजीपटल व्यवहारों को निर्दिष्ट करने की अनुमति देता है, जैसे कि सभी नए शब्दों को कैपिटल करना या ऑटो-पूर्ण और वर्तनी सुझावों जैसी सुविधाओं का उपयोग करना।
यहां कुछ सामान्य इनपुट प्रकार मान हैं जो कीबोर्ड व्यवहार को परिभाषित करते हैं:

प्रकार विवरण
textCapSentences सामान्य पाठ कीबोर्ड जो प्रत्येक नए वाक्य के लिए पहले अक्षर को कैपिटल करता है
textCapWords सामान्य टेक्स्ट कीबोर्ड जो हर शब्द को कैपिटल करता है। शीर्षकों या व्यक्ति नामों के लिए अच्छा है
textAutoCorrect सामान्य टेक्स्ट कीबोर्ड जो आमतौर पर गलत वर्तनी वाले शब्दों को सही करता है

जरूरत पड़ने पर ('|' द्वारा अलग किए गए) आप कई inputType विशेषताएँ सेट कर सकते हैं।
उदाहरण:

<EditText
    android:id="@+id/postal_address"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="@string/postal_address_hint"
    android:inputType="textPostalAddress|
                       textCapWords|
                       textNoSuggestions" />

आप सभी उपलब्ध इनपुट प्रकार की एक सूची देख सकते हैं यहां

`inputype` विशेषता

EditText विजेट में inputype विशेषता: (Android 4.4.3 और 2.3.3 पर परीक्षण किया गया)

<EditText android:id="@+id/et_test" android:inputType="?????"/>

textLongMessage = कीबोर्ड: वर्णमाला / डिफ़ॉल्ट। Enter बटन: Send / Next भावना: हाँ। केस: लोअरकेस। सुझाव: हाँ। जोड़ें। वर्ण:, और। और सब कुछ

textFilter = कीबोर्ड: वर्णमाला / डिफ़ॉल्ट। Enter बटन: Send / Next भावना: हाँ। केस: लोअरकेस। सुझाव: नहीं । जोड़ें। वर्ण:, और। और सब कुछ

textCapScript = कीबोर्ड: वर्णमाला / डिफ़ॉल्ट। Enter बटन: Send / Next भावना: हाँ। केस: कैमल केस । सुझाव: हाँ। जोड़े। वर्ण:, और। और सब कुछ

textCapSentences = कीबोर्ड: वर्णमाला / डिफ़ॉल्ट। Enter बटन: Send / Next भावना: हाँ। केस: सजा का मामला । सुझाव: हाँ। जोड़ें। वर्ण:, और। और सब कुछ

समय = कीबोर्ड: संख्यात्मक। Enter बटन: Send / Next भावना: नहीं। मामला: -। सुझाव: नहीं । जोड़ें। वर्ण:

textMultiLine = कीबोर्ड: वर्णमाला / डिफ़ॉल्ट। बटन डालें: अगली पंक्ति । भावना: हाँ। केस: लोअरकेस। सुझाव: हाँ। जोड़ें। वर्ण: करते हैं। और सब कुछ

संख्या = कीबोर्ड: संख्यात्मक । Enter बटन: Send / Next भावना: नहीं। मामला: -। सुझाव: नहीं। जोड़ें। chars: कुछ नहीं

textEmailAddress = कीबोर्ड: वर्णमाला / डिफ़ॉल्ट। Enter बटन: Send / Next भावना: नहीं । केस: लोअरकेस। सुझाव: नहीं । जोड़ें। chars: @ और और सब कुछ

(कोई प्रकार नहीं) = कीबोर्ड: वर्णमाला / डिफ़ॉल्ट। बटन डालें: अगली पंक्ति । भावना: हाँ। केस: लोअरकेस। सुझाव: हाँ। जोड़े। वर्ण:, और। और सब कुछ

textPassword = कीबोर्ड: वर्णमाला / डिफ़ॉल्ट। Enter बटन: Send / Next भावना: नहीं। केस: लोअरकेस। सुझाव: नहीं । जोड़ें। वर्ण:, और। और सब कुछ

पाठ = कीबोर्ड: कीबोर्ड: वर्णमाला / डिफ़ॉल्ट। Enter बटन: Send / Next भावना: हाँ। केस: लोअरकेस। सुझाव: हाँ। जोड़ें। वर्ण:, और। और सब कुछ

textShortMessage = कीबोर्ड: वर्णमाला / डिफ़ॉल्ट। दर्ज करें बटन: भावना । भावना: हाँ। केस: लोअरकेस। सुझाव: हाँ। जोड़ें। वर्ण:, और। और सब कुछ

textUri = कीबोर्ड: वर्णमाला / डिफ़ॉल्ट। Enter बटन: Send / Next भावना: नहीं। केस: लोअरकेस। सुझाव: नहीं । जोड़ें। chars: / और और सब कुछ

textCapCharacters = कीबोर्ड: वर्णमाला / डिफ़ॉल्ट। Enter बटन: Send / Next भावना: हाँ। मामला: UPPERCASE सुझाव: हाँ। जोड़ें। वर्ण:, और। और सब कुछ

फोन = कीबोर्ड: संख्यात्मक । Enter बटन: Send / Next भावना: नहीं। मामला: -। सुझाव: नहीं । जोड़ें। chars: *** #। - / () WPN, + **

textPersonName = कीबोर्ड: वर्णमाला / डिफ़ॉल्ट। Enter बटन: Send / Next भावना: हाँ। केस: लोअरकेस। सुझाव: हाँ। जोड़ें। वर्ण:, और। और सब कुछ


नोट: Auto-capitalization सेटिंग डिफ़ॉल्ट व्यवहार को बदल देगा।

नोट 2: Numeric keyboard , सभी नंबर अंग्रेजी 1234567890 हैं।

नोट 3: Correction/Suggestion सेटिंग डिफ़ॉल्ट व्यवहार को बदल देगा।

छुपा सॉफ्टकेयबोर्ड

EditText के साथ काम करते समय आमतौर पर सॉफ्टकीबोर्ड को छिपाना एक बुनियादी आवश्यकता हैडिफ़ॉल्ट रूप से softkeyboard केवल वापस बटन दबाने और इतने सबसे डेवलपर्स का उपयोग बंद कर सकता है InputMethodManager वर्चुअल कीबोर्ड बुला छिपाने के लिए एंड्रॉयड के लिए मजबूर करने hideSoftInputFromWindow और अपने केंद्रित दृश्य वाली विंडो के प्रमाणस्वरूप गुजर। निम्नलिखित करने के लिए कोड:

public void hideSoftKeyboard()    
{
        InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
        inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);    
}

कोड प्रत्यक्ष है, लेकिन एक और बड़ी समस्या जो उत्पन्न होती है वह यह है कि कुछ घटना होने पर छिपाने के कार्य को कॉल करने की आवश्यकता होती है। जब आपको अपने EditText के अलावा कहीं और दबाने पर छिपे हुए Softkeyboard की आवश्यकता हो तो क्या करें? निम्न कोड एक साफ फ़ंक्शन देता है जिसे बस एक बार आपके ऑनक्रिएट () पद्धति में बुलाया जाना चाहिए।

public void setupUI(View view) 
{
        String s = "inside";
        //Set up touch listener for non-text box views to hide keyboard.
        if (!(view instanceof EditText)) {

            view.setOnTouchListener(new View.OnTouchListener() {

                public boolean onTouch(View v, MotionEvent event) {
                    hideSoftKeyboard();
                    return false;
                }

            });
        }

        //If a layout container, iterate over children and seed recursion.
        if (view instanceof ViewGroup) {

            for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {

                View innerView = ((ViewGroup) view).getChildAt(i);

                setupUI(innerView);
            }
        }    
}

कस्टम संपादित करें पाठ और उसकी कार्रवाई के अंदर आइकन या बटन और श्रोताओं पर क्लिक करें।

यह उदाहरण दाईं ओर आइकन के साथ पाठ को संपादित करने में मदद करेगा।

नोट: इसमें बस मैं setCompoundDrawablesWithIntrinsicBounds का उपयोग कर रहा हूं, इसलिए यदि आप आइकन स्थिति को बदलना चाहते हैं तो आप setIpoundDrawablesWithIntrinsicBounds का उपयोग करके सेटआईकॉन में प्राप्त कर सकते हैं।

public class MKEditText extends AppCompatEditText {

    public interface IconClickListener {
        public void onClick();
    }

    private IconClickListener mIconClickListener;

    private static final String TAG = MKEditText.class.getSimpleName();

    private final int EXTRA_TOUCH_AREA = 50;
    private Drawable mDrawable;
    private boolean touchDown;

    public MKEditText(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

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

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

    public void showRightIcon() {
        mDrawable = ContextCompat.getDrawable(getContext(), R.drawable.ic_android_black_24dp);

        setIcon();
    }

    public void setIconClickListener(IconClickListener iconClickListener) {
        mIconClickListener = iconClickListener;
    }

    private void setIcon() {
        Drawable[] drawables = getCompoundDrawables();

        setCompoundDrawablesWithIntrinsicBounds(drawables[0], drawables[1], mDrawable, drawables[3]);

        setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
        setSelection(getText().length());
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        final int right = getRight();
        final int drawableSize = getCompoundPaddingRight();
        final int x = (int) event.getX();
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                if (x + EXTRA_TOUCH_AREA >= right - drawableSize && x <= right + EXTRA_TOUCH_AREA) {
                    touchDown = true;
                    return true;
                }
                break;
            case MotionEvent.ACTION_UP:
                if (x + EXTRA_TOUCH_AREA >= right - drawableSize && x <= right + EXTRA_TOUCH_AREA && touchDown) {
                    touchDown = false;
                    if (mIconClickListener != null) {
                        mIconClickListener.onClick();
                    }
                    return true;
                }
                touchDown = false;
                break;

        }
        return super.onTouchEvent(event);
    }
}

यदि आप स्पर्श क्षेत्र को बदलना चाहते हैं, तो आप EXTRA_TOUCH_AREA मानों को डिफ़ॉल्ट रूप से बदल सकते हैं जिसे मैंने 50 दिया था।

और बटन सक्षम करें और श्रोता पर क्लिक करके आप अपनी गतिविधि या इस तरह के फ्रैगमेंट से कॉल कर सकते हैं,

MKEditText mkEditText = (MKEditText) findViewById(R.id.password);
mkEditText.showRightIcon();
mkEditText.setIconClickListener(new MKEditText.IconClickListener() {
            @Override
            public void onClick() {
              // You can do action here for the icon.
               
            }
        });


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow