web-dev-qa-db-fra.com

Afficher l'erreur sur la pointe du texte d'édition Android

Je veux montrer une erreur si l'utilisateur entre une valeur vide dans l'edittext.Mais je ne comprends pas comment je pourrais le faire. 

enter image description here

Ceci est mon xml que j'ai créé 

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:orientation="horizontal" >

    <LinearLayout
        Android:id="@+id/headerLayout"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:layout_alignParentTop="true"
        Android:background="@drawable/top_bg"
        Android:orientation="horizontal" >

        <ImageView
            Android:id="@+id/back_button"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_marginLeft="10dp"
            Android:layout_marginTop="5dp"
            Android:src="@drawable/back_button" />

        <TextView
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:layout_marginLeft="75dp"
            Android:layout_marginTop="10dp"
            Android:text="Traveller Details"
            Android:textColor="@Android:color/white" />
    </LinearLayout>
    <LinearLayout 
        Android:id="@+id/tittleLayout"
        Android:layout_below="@+id/headerLayout"
        Android:layout_height="wrap_content"
        Android:layout_width="fill_parent"
        Android:orientation="vertical" >

        <TextView
            Android:id="@+id/TittleTravellerDetails"
            Android:layout_width="wrap_content"
            Android:layout_height="match_parent"
            Android:layout_marginLeft="10dp"
            Android:layout_marginTop="5dp"
            Android:gravity="left"
            Android:text="Traveller Details" />

        <View
            Android:layout_width="wrap_content"
            Android:layout_height="2dip"
            Android:layout_marginTop="2dp"
            Android:background="#FF909090" />

    </LinearLayout>

    <LinearLayout
        Android:id="@+id/passengerDetails"
        Android:layout_below="@+id/tittleLayout"
        Android:layout_height="wrap_content"
        Android:layout_width="fill_parent"
        Android:orientation="vertical">

        <Spinner
            Android:id="@+id/Tittle"
            Android:layout_width="290dp"
            Android:layout_marginLeft="5dp"
            Android:layout_marginTop="5dp"
            Android:layout_height="wrap_content"/>
        <EditText
            Android:id="@+id/firstName"
            Android:layout_width="290dp"
            Android:layout_height="wrap_content"
            Android:layout_marginLeft="5dp"
            Android:layout_marginTop="5dp"
            Android:hint="First Name" />

        <EditText
            Android:id="@+id/LastName"
            Android:layout_width="290dp"
            Android:layout_height="wrap_content"
            Android:layout_marginLeft="5dp"
            Android:layout_marginTop="5dp"
            Android:hint="Last Name" />

    </LinearLayout>
    <LinearLayout 
        Android:id="@+id/ContactDetailsLayout"
        Android:layout_below="@+id/passengerDetails"
        Android:layout_height="wrap_content"
        Android:layout_width="fill_parent"
        Android:layout_marginTop="10dp"
        Android:orientation="vertical" >

        <TextView
            Android:id="@+id/TittleContactDetails"
            Android:layout_width="wrap_content"
            Android:layout_height="match_parent"
            Android:layout_marginLeft="10dp"
            Android:layout_marginTop="5dp"
            Android:gravity="left"
            Android:text="ContactDetails" />

        <View
            Android:layout_width="wrap_content"
            Android:layout_height="2dip"
            Android:layout_marginTop="2dp"
            Android:background="#FF909090" />

    </LinearLayout>

    <LinearLayout
        Android:id="@+id/mobileEmailDetails"
        Android:layout_below="@+id/ContactDetailsLayout"
        Android:layout_height="wrap_content"
        Android:layout_width="fill_parent"
        Android:orientation="vertical">

        <EditText
            Android:id="@+id/mobileNumber"
            Android:layout_width="290dp"
            Android:layout_height="wrap_content"
            Android:layout_marginLeft="5dp"
            Android:layout_marginTop="5dp"
            Android:inputType="number"
            Android:hint="Mobile No" />

        <TextView
            Android:id="@+id/emailid"
            Android:layout_width="284dp"
            Android:layout_height="wrap_content"
            Android:layout_marginLeft="8dp"
            Android:layout_marginTop="5dp"
            Android:hint="Email ID" />

    </LinearLayout>
    <LinearLayout 
        Android:id="@+id/continueBooking"
        Android:layout_below="@+id/mobileEmailDetails"
        Android:layout_height="wrap_content"
        Android:layout_width="fill_parent"
        Android:orientation="vertical">

        <ImageView
            Android:id="@+id/continuebooking"
            Android:layout_width="wrap_content"
            Android:layout_height="match_parent"
            Android:layout_marginLeft="20dp"
            Android:layout_marginTop="25dp"

            Android:src="@drawable/continue" />

    </LinearLayout>

 </RelativeLayout>

Code d'activité

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);
        emailId = (TextView)findViewById(R.id.emailid);
        continuebooking = (ImageView)findViewById(R.id.continuebooking);
        firstName= (EditText)findViewById(R.id.firstName);
        emailId.setText("[email protected]");
        setTittle();
        continuebooking.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {

                if(firstName.getText().toString().trim().equalsIgnoreCase("")){
                    firstName.setError("Enter FirstName");
                }

            }
        });
    }

Donc, si l’utilisateur n’entre pas son prénom, je souhaite afficher une erreur telle que l’image indiquant que vous n’avez entré aucun nom de ce genre.

28
Developer

Vous pouvez afficher l'erreur en tant que PopUp of EditText

if (editText.getText().toString().trim().equalsIgnoreCase("")) {
      editText.setError("This field can not be blank");
}

et ce sera comme suit

enter image description here

firstName.addTextChangedListener(new TextWatcher()  {

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    }

    @Override
    public void afterTextChanged(Editable s)  {
        if (firstName.getText().toString().length <= 0) {
            firstName.setError("Enter FirstName");
        } else {
            firstName.setError(null);
        }
    }
 });
83
SilentKiller
private void showError() {
   mEditText.setError("Password and username didn't match");
}

Ce qui entraînera des erreurs comme ceci:

enter image description here

Et si vous voulez l'enlever:

 textView.setError(null);
21
Waza_Be

J'ai eu la solution de mon problème J'espère que cela aidera également les autres.J'ai utilisé onTextChnaged qu'il invoque Lorsqu'un objet d'un type est attaché à un Editable, ses méthodes seront appelées lorsque le texte est modifié.

public class MainActivity extends Activity {
    TextView emailId;
    ImageView continuebooking;
    EditText firstName;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);
        emailId = (TextView)findViewById(R.id.emailid);
        continuebooking = (ImageView)findViewById(R.id.continuebooking);
        firstName= (EditText)findViewById(R.id.firstName);
        emailId.setText("[email protected]");
        setTittle();
        continuebooking.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {

                if(firstName.getText().toString().trim().equalsIgnoreCase("")){
                    firstName.setError("Enter FirstName");
                }

            }
        });
        firstName.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                firstName.setError(null);

            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {
                // TODO Auto-generated method stub

            }

            @Override
            public void afterTextChanged(Editable s) {
                firstName.setError(null);

            }
        });
    }
3
Developer
if(TextUtils.isEmpty(firstName.getText().toString()){
      firstName.setError("TEXT ERROR HERE");
}

Vous pouvez également utiliser TextInputLayout, qui possède une méthode utile et une animation conviviale.

2
Sofiane Hassaini

Je sais que c'est trop tard, mais au cas où quelqu'un aurait encore besoin d'aide. Voici la solution de travail . Définir une error est plutôt simple Mais il sera affiché à l'utilisateur lorsqu'il demandera Focus dessus. Donc, pour faire les deux choses vous-même, utilisez cette code

 firstName.setError("Enter FirstName");
 firstName.requestFocus();
1
Nouman Ghaffar

Avec youredittext.equals(""), vous pouvez savoir si l'utilisateur n'a pas saisi de lettre.

0
Lyd

Utiliser la langue Kotlin,

EXEMPLE DE CODE

 login_ID.setOnClickListener {
            if(email_address_Id.text.isEmpty()){
                email_address_Id.error = "Please Enter Email Address"
            }
            if(Password_ID.text.isEmpty()){
                Password_ID.error = "Please Enter Password"
            }
        }
0
BloodLoss