我需要在我的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>
答案 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" />
输出看起来像这样。
答案 1 :(得分:1)
这可能/可能不是你想要的答案,但它对我有用。
将addTextChangedListener
TextWatcher添加到EditText
将android:inputType="number"
添加到EditText xml
希望它有所帮助:)
答案 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);