42

如果用户在编辑文本中输入空白值,我想显示错误。但我不明白我怎么能这样做。这就是我想要的方式:

在此处输入图像描述

这是我创建的 xml

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

活动代码

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("gauravthethinker@gmail.com");
        setTittle();
        continuebooking.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {

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

            }
        });
    }

所以,如果用户不输入他的名字,我想显示一个错误,比如你没有输入任何类似的名字的图像。请帮助我,我是 android 的新手。谢谢

4

12 回答 12

115

您可以将错误显示为 PopUpEditText

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

这将如下所示

在此处输入图像描述

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);
        }
    }
 });
于 2013-08-14T07:16:43.303 回答
27
private void showError() {
   mEditText.setError("Password and username didn't match");
}

这将导致如下所示的错误:

在此处输入图像描述

如果你想删除它:

 textView.setError(null);
于 2013-08-14T07:17:34.350 回答
14

我知道为时已晚,但万一有人仍然需要帮助。这是工作解决方案。设置一个error非常简单。但是当他请求Focus它时,它将显示给用户。因此,要自己做这两件事,请使用 this code

 firstName.setError("Enter FirstName");
 firstName.requestFocus();
于 2018-07-18T15:14:26.927 回答
4

我得到了我的问题的解决方案希望这对其他人也有帮助。我使用了 onTextChnaged 它调用当一个类型的对象附加到一个可编辑对象时,它的方法将在文本更改时被调用。

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("test@gmail.com");
        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);

            }
        });
    }
于 2013-08-14T08:16:13.503 回答
3
if(TextUtils.isEmpty(firstName.getText().toString()){
      firstName.setError("TEXT ERROR HERE");
}

或者你也可以使用 TextInputLayout 它有一些有用的方法和一些用户友好的动画

于 2016-03-01T09:24:47.677 回答
2

使用 Kotlin 语言,

示例代码

 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"
            }
        }
于 2019-01-09T18:41:43.963 回答
0

youredittext.equals("")你可以知道用户是否没有输入任何字母。

于 2013-08-14T07:15:56.660 回答
0

你可以用这个:

@Override
        public void afterTextChanged(Editable s) {
            super.afterTextChanged(s);
            if (s.length() == Bank.PAN_MINIMUM_RECOGNIZABLE_LENGTH + 10) {
                Bank bank = BankUtil.findByPan(s.toString());
                if (null != bank && mNewPanEntered && !mNameDefined) {
                    mNewPanEntered = false;
                    suggestCardName(bank);
                }

private void suggestCardName(Bank bank) {
    mLastSuggestTime = System.currentTimeMillis();
    if (!bank.getName().trim().matches(getActivity().getString(R.string.bank_eghtesadnovin))) {
        inputCardNumber.setError(R.string.balance_not_enmb, true);

    }
}
于 2020-08-04T09:11:40.233 回答
0

按照这个方法实现这个东西的简单方法

第一个初始 EditText 字段

  EditText editText = findViewById(R.id.editTextField);

当你完成初始化。现在是时候将估算值保存在变量中了

  final String userInput = editText.getText().toString();

现在是时候检查用户是否满足条件了

  if (userInput.isEmpty()){
           editText.setError("This field need to fill up");
       
        }else{
         //Do what you want to do
      }

这是我如何处理我的项目的示例

  private void sendMail() {
       final String userMessage = etMessage.getText().toString();
          if (userMessage.isEmpty()) {

            etMessage.setError("Write to us");

    }else{
       Toast.makeText(this, "You write to us"+etMessage, Toast.LENGTH_SHORT).show();
      }
   }

希望它会帮助你。

快乐编码

于 2020-07-27T13:17:23.577 回答
-1

您已经在onClick事件中编写了代码。这将在您单击时调用EditText。但这就像您在进入之前正在检查它。

所以我的建议是,你应该使用focus changed. 当任何视图获得焦点时,您正在设置no error并且当焦点改变时,您检查是否有有效输入,如下所示。

firstName.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View arg0, boolean arg1) {
        firstName.setError(null);
        if (firstName.getText().toString().trim().equalsIgnoreCase("")) {
            firstName.setError("Enter FirstName");
        }
    }
});
于 2013-08-14T07:27:07.030 回答
-1

您可以使用 onchange 事件来触发验证,然后如果这对您来说足够了,您可以显示祝酒词

于 2013-08-14T07:17:23.147 回答
-1

似乎您无法得到的只是在 editText 末尾显示错误。将您的 editText 宽度设置为与父布局包围的宽度相匹配。会工作得很好。

于 2015-07-20T05:29:10.540 回答