在设置的最小值和最大值之间设置编辑文本输入

时间:2018-12-06 12:23:50

标签: java android

我有一个EditText,它将赋予这组价值

58.4444.2甚至像-58.44-44.2

一样为负数

我如何防止它超过-100和100之间,我尝试了此link,但没有任何乐趣。

我想让EditText仅在超过100到100之间输入,然后才不要继续输入。

3 个答案:

答案 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.9999.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,然后按照以下步骤操作:

  1. 在您的OnFocusChangeListener中实施Activity

    MainActivity extends AppCompatActivity implements View.OnFocusChangeListener
    
  2. 覆盖其onFocusChange方法。

    @Override
     public void onFocusChange(View view, boolean b) {}
    
  3. 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} + $