Java 如何在编辑文本中仅允许正数
我有一个TextWatcher,当所有EditText length()都为0现在我想添加一个功能,以确保数字为正。我尝试在另一个if()中放入一个新的if(),以检查if>0,但由于某些原因,它不起作用 所以我需要的是确保所有EditText都不是空的,并且输入了正数,然后启用该数字 这就是我所拥有的Java 如何在编辑文本中仅允许正数,java,android,textwatcher,Java,Android,Textwatcher,我有一个TextWatcher,当所有EditText length()都为0现在我想添加一个功能,以确保数字为正。我尝试在另一个if()中放入一个新的if(),以检查if>0,但由于某些原因,它不起作用 所以我需要的是确保所有EditText都不是空的,并且输入了正数,然后启用该数字 这就是我所拥有的 public TextWatcher localWatcher = new TextWatcher() { @Override public void beforeTex
public TextWatcher localWatcher = 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) {
}
// When the text is edited, I want to check if all textViews are filled
@Override
public void afterTextChanged(Editable s) {
// Check if any of the TextViews are == 0, if so the button remains disabled
if (et1local.getText().toString().length() == 0
|| et2local.getText().toString().length() == 0
|| et3local.getText().toString().length() == 0
|| et4local.getText().toString().length() == 0
|| et5local.getText().toString().length() == 0
|| et6local.getText().toString().length() == 0
|| et7local.getText().toString().length() == 0
|| et8local.getText().toString().length() == 0
|| et9local.getText().toString().length() == 0) {
if(et1local){
localCalculateButton.setEnabled(false);
}
}
// When all are filled enable the button
else {
localCalculateButton.setEnabled(true);
}
}
};
这很好,但如何检查数字是否为正数,任何帮助都将非常感谢。对于每个
EditText
,您必须执行以下操作:
if (Integer.parseInt(et1local.getText().toString()) > 0)
执行一个函数以确保它是一个数字
private boolean isPositive(EditText et)
{
try
{
return Integer.parseInt(et.getText().toString()) > 0;
}
catch (Exception e)
{
return false;
}
}
这样使用:
if (et1local.getText().toString().length() == 0 || !isPositive(et1local)
|| et2local.getText().toString().length() == 0 || !isPositive(et2local)
// [...]
您应该使用EditText的属性:
android:digits="0123456789."
android:inputType="number"
所以用户只能输入不带减号的数字
更新:
类似于此,要防止第一个符号为0:
editText.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable edt) {
if (edt.length() == 1 && edt.toString().equals("0"))
editText.setText("");
}
// ...
});
这比ToYonos的回答有点冗长,但可能有助于理解这些原则。它还稍微简化了if块
private boolean isEditTextEmptyOrNegative(EditText editText) {
// check if editText is empty
if (editText.getText().toString().length() == 0)
return true;
// get text from editText
String text = editText.getText().toString();
try {
// try to parse text to int
int textInt = Integer.valueOf(text);
// if int is > 0, return false (not empty or negative), else return true (int is negative)
if (textInt > 0)
return false;
else
return true;
} catch (NumberFormatException nfe) {
// catch NumberFormatException, text entered is not a valid int, treat it as empty (you may want to handle differently)
return true;
}
}
你的if块是这样的:
if (isEditTextEmptyOrNegative(et1local) || isEditTextEmptyOrNegative(et2local) || ... )
只需删除
onTextChanged
中的减号即可
public void onTextChanged(CharSequence s, int start, int before,
int count) {
et1Local.setText(et1local.getText().toString().replace"-",""));
.....
et9Local.setText(et9local.getText().toString().replace("-".""));
}
对我来说,只需设置
android:inputType=“number”
(没有android:digits
部分)就可以了。我在前导零转换为负数方面没有任何问题,正如您所看到的那样(我使用
Integer.valueOf(binding.myEditText.getEditableText().toString())
)。用“-”替换“-”怎么样?您好,我已经实现了这个,但是我不想在第一个数字空间中加0,因为这是负数。@Getek99如果你同时设置了android:digits=“0123456789.”android:inputType=“numberDecimal”
,那么它也应该只接受格式化的数字,(并去掉前导的0)。你是否尝试过用android:inputType=“numberDecimal”执行末日骑士的建议?如果android:inputType=“numberDecimal”没有帮助,那么您必须在TextWatcher中处理它。如果我的答案对你有帮助,请接受=)是的,我试过安卓:digits=“0123456789。”安卓:inputType=“numberDecimal”