Google द्वारा वर्णित त्रुटि संदेश दिखाने के लिए Android EditText डिज़ाइन करें


151

मुझे इसकी आवश्यकता EditTextहै जो इस तरह दिखता है:

यहाँ छवि विवरण दर्ज करें

इसके बजाय फोन पर ऐसा लगता है:

यहाँ छवि विवरण दर्ज करें

नोट: एप्लिकेशन एसडीके 19 (4.4.2) पर चल रहा है

न्यूनतम एसडीके 1 है

क्या सेटर्र के समान कोई विधि है जो स्वचालित रूप से ऐसा करती है, या क्या मुझे इसके लिए कोड लिखना होगा?

धन्यवाद


1
आप बस एक के साथ ऐसा करने में सक्षम होने की संभावना नहीं है EditText। अधिक संभावना है, आपको कुछ ऐसी चीज की आवश्यकता होगी जो लपेटती है EditTextया अन्यथा इसमें जुड़ जाती है। Github.com/rengwuxian/MaterialEditText देखें ।
कॉमन्सवेयर

जवाबों:


330

Google के TextInputLayoutभाग के रूप में पेश किए जाने के बाद से तृतीय-पक्ष लाइब्रेरी का उपयोग करने की कोई आवश्यकता नहीं है design-support-library

एक बुनियादी उदाहरण के बाद:

ख़ाका

<android.support.design.widget.TextInputLayout
    android:id="@+id/text_input_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:errorEnabled="true">

    <android.support.design.widget.TextInputEditText
        android:id="@+id/edit_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Enter your name" />

</android.support.design.widget.TextInputLayout>

नोट: इसकीapp:errorEnabled="true" विशेषता के रूप में सेट करने से TextInputLayoutयह किसी त्रुटि के प्रदर्शित होने के बाद आकार में परिवर्तित नहीं होगा - इसलिए यह मूल रूप से अंतरिक्ष को अवरुद्ध करता है।

कोड

नीचे दी गई त्रुटि को दिखाने के लिए EditTextआपको बस (बच्चे पर नहीं ) कॉल #setErrorकरना होगा :TextInputLayoutEditText

TextInputLayout til = (TextInputLayout) findViewById(R.id.text_input_layout);
til.setError("You need to enter a name");

परिणाम

चित्र त्रुटि संदेश के साथ संपादित पाठ दिखा रहा है

त्रुटि को छिपाने के लिए और टिंट को बस कॉल करने के लिए रीसेट करें til.setError(null)


ध्यान दें

उपयोग करने के लिए TextInputLayoutआपको अपनी build.gradleनिर्भरता में निम्नलिखित को जोड़ना होगा :

dependencies {
    compile 'com.android.support:design:25.1.0'
}

एक कस्टम रंग सेट करना

डिफ़ॉल्ट रूप से EditTextवसीयत की रेखा लाल होगी। यदि आपको एक अलग रंग प्रदर्शित करने की आवश्यकता है तो आप कॉल करते ही निम्न कोड का उपयोग कर सकते हैं setError

editText.getBackground().setColorFilter(getResources().getColor(R.color.red_500_primary), PorterDuff.Mode.SRC_ATOP);

इसे साफ़ करने के लिए बस clearColorFilterफ़ंक्शन को इस तरह से कॉल करें:

editText.getBackground().clearColorFilter();

3
हाँ ! बस ! हालांकि आप लाइन को लाल कैसे बनाते हैं?
किमी

3
@kmn लाइन को लाल करना बॉक्स से बाहर नहीं आता है, इसलिए आपको इसे स्वयं करने की आवश्यकता है। मेरा संपादन देखें। संकेत के संदर्भ में: यह संभव नहीं है।
रिवर्स

5
@ जब तक मैं सिर्फ यह कहने की कोशिश कर रहा हूं कि जब आप AppCompatActivity का विस्तार कर रहे हैं तो यह काम करना चाहिए। फिर भी: Appcompat-v23 के रूप में, अब कलरफिल्टर को सेट करना आवश्यक नहीं है, जैसे ही आप कॉल कर रहे हैं textInputLayout.setError("Error messsage"), रंग EditTextलाल होना चाहिए। इसे रीसेट करने के लिए, यह कॉल करने के लिए पर्याप्त है textInputLayout.setError(null)
रिवर्स

3
editText.getBackground().setColorFilter(getResources().getColor(R.color.red_500_primary), PorterDuff.Mode.SRC_ATOP);अब नवीनतम समर्थन पुस्तकालय के साथ की जरूरत नहीं है
एंटोनी बोलिव

13
बस ध्यान देना चाहता था, क्योंकि यह इतना छोटा विवरण है - मैं इस समस्या को सेट पर कॉल कर रहा था EditText, पर नहीं TextInputLayout। मैंने इस उत्तर को देखा और अभी भी यह पता नहीं लगा सका कि मुझे क्या बदलना है। बहुत आसान बात याद आती है।
h_k

8

के myTextInputLayout.setError()बजाय कॉल करें myEditText.setError()

इन कंटेनर और कंटेंट की सेटिंग में डबल फंक्शनलिटी होती है। कार्यक्षमता की जरूरत है आप एक कंटेनर है। लेकिन आपको उसके लिए न्यूनतम 23 संस्करण की आवश्यकता हो सकती है।


7

अपने EditTextआप को एक में लपेटा जाना चाहिएTextInputLayout

<android.support.design.widget.TextInputLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:id="@+id/tilEmail">

    <EditText
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:inputType="textEmailAddress"
        android:ems="10"
        android:id="@+id/etEmail"
        android:hint="Email"
        android:layout_marginTop="10dp"
        />

</android.support.design.widget.TextInputLayout>

जैसा आप चाहते थे एक त्रुटि संदेश प्राप्त करने के लिए, त्रुटि सेट करें TextInputLayout

TextInputLayout tilEmail = (TextInputLayout) findViewById(R.id.tilEmail);
if (error){
    tilEmail.setError("Invalid email id");    
}

आपको डिज़ाइन समर्थन लाइब्रेरी निर्भरता जोड़ना चाहिए। इस रेखा को अपनी श्रेणी निर्भरता में जोड़ें

compile 'com.android.support:design:22.2.0'

4

reVerse का जवाब बहुत अच्छा है लेकिन इसने यह नहीं बताया कि फ्लोटिंग एरर टूलटिप किस तरह का है

आपको इसे edittext.setError(null)हटाने की आवश्यकता होगी ।
इसके अलावा, जैसा कि किसी ने बताया, आपको ज़रूरत नहीं हैTextInputLayout.setErrorEnabled(true)

ख़ाका

<android.support.design.widget.TextInputLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <EditText
        android:id="@+id/edittext"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Enter something" />
</android.support.design.widget.TextInputLayout>

कोड

TextInputLayout til = (TextInputLayout) editText.getParent();
til.setError("Your input is not valid...");
editText.setError(null);


0

अगर किसी को अभी भी उत्तर में उल्लिखित Google की डिज़ाइन लाइब्रेरी का उपयोग करने में त्रुटि का सामना करना पड़ रहा है, तो कृपया इसका उपयोग @h_s द्वारा टिप्पणी के रूप में करें -

TextEputLayout पर setError को कॉल करने के बजाय , आप EditText पर setError का उपयोग कर सकते हैं ।


0
private EditText edt_firstName;
private String firstName;

edt_firstName = findViewById(R.id.edt_firstName);

private void validateData() {
 firstName = edt_firstName.getText().toString().trim();
 if (!firstName.isEmpty(){
//here api call for ....
}else{
if (firstName.isEmpty()) {
                edt_firstName.setError("Please Enter First Name");
                edt_firstName.requestFocus();
            } 
}
}

जब एक पुराने प्रश्न का उत्तर दिया जाता है, तो आपका उत्तर अन्य StackOverflow उपयोगकर्ताओं के लिए बहुत अधिक उपयोगी होगा यदि आपने यह समझाने के लिए कुछ संदर्भ शामिल किए कि आपका उत्तर कैसे मदद करता है, विशेष रूप से उस प्रश्न के लिए जो पहले से ही स्वीकृत उत्तर है। देखें: कैसे मैं एक अच्छा जवाब लिख सकता हूं
डेविड बक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.