Android:在EditText框中添加验证?

时间:2014-08-09 01:31:27

标签: android validation android-edittext

我需要在我的EditText框中添加验证,以便:

- 只能输入数字 - 无法给出空答案(即不能只按下输入按钮)

如果上述任何一种情况发生,我只是希望应用程序不接受该条目并允许用户尝试重新输入有效条目。

我该怎么办?

相关活动代码:

 answer = (EditText) findViewById(R.id.etEnterAnswerRandomTest);

     //when submit button is clicked
       public void onClick(View v) {

         switch(v.getId()) {

         case R.id.btnSubmitRandomTest:
            // sets string equal to what is entered in editText
            final String entry = answer.getText().toString();
            // convert from string value to int
            int a = Integer.parseInt(entry); 

edittext框的XML:

<EditText
        android:id="@+id/etEnterAnswerRandomTest"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="Enter Answer..." >
    </EditText>

4 个答案:

答案 0 :(得分:2)

这应该会帮助你。我已经创建了一个textwatcher和简单的方法inputValidation,它返回一个布尔值,无论editable是否为空。如果显示验证标签时edittext为空白。

TextView input_validation;
EditText input;
int final_input_value;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    setupViews();
}

public void setupViews() {
    input_validation = (TextView) findViewById(R.id.input_validation);
    input_validation.setVisibility(View.GONE);
    input = (EditText) findViewById(R.id.input);
    input.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) {
        }
        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {
        }
        @Override
        public void afterTextChanged(Editable editable) {
            if (inputValidation(editable)) {
                input_validation.setVisibility(View.VISIBLE);
                input_validation.setText("You must enter your Age");
            } else {
                input_validation.setVisibility(View.GONE);
                final_input_value = Integer.parseInt(editable.toString());
            }
        }
    });
}
public boolean inputValidation(Editable inputText) {
    return inputText.toString().isEmpty();
}

布局

  <TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/input_label"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:text="Your Age"
    android:textStyle="bold"
    android:textColor="@android:color/holo_blue_dark"
    android:paddingBottom="16dp" />

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/input"
    android:inputType="number"
    android:layout_below="@+id/input_label"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true" />

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/input_validation"
    android:textStyle="italic"
    android:textColor="@android:color/holo_red_dark"
    android:layout_below="@+id/input"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true" />

输出看起来像这样。

enter image description here

答案 1 :(得分:1)

这可能/可能不是你想要的答案,但它对我有用。

  1. addTextChangedListener TextWatcher添加到EditText

  2. android:inputType="number"添加到EditText xml

  3. How to use TextWatcher

    希望它有所帮助:)

答案 2 :(得分:1)

要仅将数字作为输入,请在您的edittext中使用此

android:inputType="0123456789"

onCreate内使用此代码

edittext.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if(editText.getText().toString.length()<1){
        // Display toast 
        Toast.makeText(getApplicationContext(), "Please enter something !",Toast.LENGTH_LONG).show();
      }
    }

 });

答案 3 :(得分:0)

仅获取数字使用XML中的以下内容

android:inputType="number"

要获得非空输入,请在按钮的 onClickListner 内执行以下操作:

if(editText.getText().toString.length()<1){
//do something saying nothing is entered. Display toast may be
}

使用代码,你可以

editText.setInputType(InputType.TYPE_CLASS_NUMBER);