我有一个EditText
,它将赋予这组价值
58.44
,44.2
甚至像-58.44
,-44.2
我如何防止它超过-100和100之间,我尝试了此link,但没有任何乐趣。
我想让EditText
仅在超过100到100之间输入,然后才不要继续输入。
答案 0 :(得分:1)
您可以添加这样的条件
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if (s.toString().length() > 0) {
String value = s.toString();
Double numericValue = Double.parseDouble(value);
if (numericValue < -100 || numericValue > 100) {
editText.setText("");
}
}
}
});
将您的EditText输入类型设置为
android:inputType="numberDecimal|numberSigned"
答案 1 :(得分:0)
如果要以编程方式求解,TextWatcher
是一个不错的选择。
在onTextChanged()
内,检查您更改的CharSequence是否满足需要,否则请替换。
editText.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) {
}
});
答案 2 :(得分:0)
使用正则表达式模式,您可以处理-99.99
和99.99
之间的数字
^ [-+]?[0-9] {1,2} \。[0-9] {1,2} + $
更新2: 对于> =-100和<= 100,请使用以下正则表达式:
^ [-+] 100 | ^ [-+]?[0-9] {1,2}。[0-9] {1,2} + $
在下面的示例中,检查文本并启用/禁用按钮(如果不匹配)。
EditText mEditText;
Button mButton;
final static String mRegex = "^[-+]100|^[-+]?[0-9]{1,2}\.[0-9]{1,2}+$";
boolean inputMatches;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mEditText = findViewById(R.id.editText);
mEditText.addTextChangedListener(new InputController());
mButton = findViewById(R.id.button);
mButton.setEnabled(inputMatches);
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this," Input matches!", Toast.LENGTH_SHORT).show();
}
});
}
public class InputController implements TextWatcher {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
String input = mEditText.getText().toString();
inputMatches = input.matches(mRegex);
}
}
更新:
根据您清除Edittext
的要求。有多种方法可以执行此操作。您可以按照上面的其他答案进行操作,也可以根据需要使用我上面的答案,而可以使用TextWatches
代替OnFocusChangeListener
。如果您有多个Edittext,则更好。当您的Edittext
失去焦点时,此代码将触发以查看其是否与正则表达式模式匹配。如果不匹配,请清除它。
删除上面的TextWatcher,然后按照以下步骤操作:
在您的OnFocusChangeListener
中实施Activity
MainActivity extends AppCompatActivity implements View.OnFocusChangeListener
覆盖其onFocusChange
方法。
@Override
public void onFocusChange(View view, boolean b) {}
在onFocusChange
内部进行检查。
@Override
public void onFocusChange(View view, boolean b) {
if(!b){ // Lost focus
String text = ((EditText)view).getText().toString();
if(text.matches(mRegex)){
// It matches
Toast.makeText(MainActivity.this, "Input matches!!!", Toast.LENGTH_SHORT).show();
}
else{
// No match - clear Edittext
((EditText)view).setText("");
Toast.makeText(MainActivity.this, "Input doesn't match", Toast.LENGTH_SHORT).show();
}
}
}
更新2
要包含-100和100,请使用以下正则表达式模式:
^ [-+] 100 | ^ [-+]?[0-9] {1,2}。[0-9] {1,2} + $