在set min和max之间设置编辑文本输入

zf9nrax1  于 2021-06-30  发布在  Java
关注(0)|答案(3)|浏览(226)

我有一个 EditText 这将使这组值 58.44 , 44.2 甚至是消极的 -58.44 , -44.2 我怎样才能防止它超过-100和100之间我尝试了这个链接,但没有乐趣。
我想让我的 EditText 如果要在-100和100之间键入,则仅当超过时才继续键入。

guz6ccqo

guz6ccqo1#

如果你想用编程的方法求解, TextWatcher 是个不错的选择。
内部 onTextChanged() ,检查更改的字符序列是否与您需要的匹配,否则将其替换。

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

}
});
z4bn682m

z4bn682m2#

你可以这样添加条件

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

jckbn6z73#

使用regex模式可以处理 -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 失去焦点,则此代码将触发以查看它是否匹配regex模式。如果不匹配,则清除它。移除上面的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}+$

相关问题