我有一个带有数字输入类型的EditText元素。我不希望用户能够输入0作为第一个数字。我可以使用XML强制执行此操作吗?
以下是我目前的情况:
<EditText
android:id="@+id/main_edt_loan"
android:layout_width="fill_parent"
android:layout_height="40dip"
android:background="@drawable/sample_editbox"
android:ems="10"
android:layout_margin="10dip"
android:inputType="number"
android:hint=""
android:ellipsize="start"
android:maxLines="1"
android:imeOptions="actionNext"
android:textSize="18dip"
android:gravity="center"
android:digits="0123456789"
android:maxLength="10"
android:textColor="#000000"/>
答案 0 :(得分:5)
没有。但是你可以做的是每次文本更改时检查你的活动,然后在第一个符号为“0”时做任何需要做的事情。
EditText main_edt_loan = (EditText) findViewById(R.id.main_edt_loan);
main_edt_loan.addTextChangedListener(new TextWatcher()
{
public void afterTextChanged(Editable s)
{
String x = s.toString
if(x.startsWith("0"))
{
//your stuff here
}
}
public void beforeTextChanged(CharSequence s, int start, int count, int after)
{
}
public void onTextChanged(CharSequence s, int start, int before, int count)
{
}
});
答案 1 :(得分:4)
还有另一种方法可以使用textWatcher。检查afterTextChange方法中可编辑文本的长度。如果长度为1且字符串为0而不是删除0。
答案 2 :(得分:3)
就这么简单。
edContactNumber.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() == 1 && s.toString().startsWith("0")) {
s.clear();
}
}
});
答案 3 :(得分:0)
public class PreventZeroAtBeginningFilter implements InputFilter {
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
if (dest.toString().equalsIgnoreCase("")) {
String charSet = "0";
if (source != null && charSet.contains(("" + source))) {
return "";
}
}
return null;
}
}
答案 4 :(得分:0)
> partition([1,2,3,4,5,6,7,8,9,0], x => x < 5)
> [[1, 2, 3, 4, 0],[5, 6, 7, 8, 9]]
答案 5 :(得分:-2)
试试这个,
在XML中,
android:text="0"
在Java中
edit.setSelection(1);