问题
I have an EditText which only accepts numeric numbers defined like this:
<EditText android:id="@+id/routeInit_price"
android:layout_height="wrap_content"
android:layout_width="120dp"
android:layout_gravity="center_horizontal"
android:lines="1"
android:inputType="numberDecimal"/>
I am validating if there is a valid input like below to enable/disable a button. However, I doesn't receive an event on the backspace/delete button pressed event. How can I fix that? Because when the EditText is empty the button should be diabled.
EditText priceField = (EditText)findViewById(R.id.routeInit_price);
priceField.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View view, int keyCode, KeyEvent keyEvent) {
if(keyEvent.getAction() == KeyEvent.ACTION_UP)
{
if(((EditText)view).getText().toString().length() > 0)
ready.setEnabled(true);
else
ready.setEnabled(false);
}
return false;
}
});
回答1:
Try this
priceField.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(priceField.getText().toString().length() > 0)
ready.setEnabled(true);
else
ready.setEnabled(false);
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
回答2:
You need to implement your own EditText and override the method onKeyPreIme():
@Override
public boolean onKeyPreIme(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
// Do whatever you want to here.
return true;
}
return false;
}
回答3:
You need to modify your code something like this:
EditText priceField = (EditText)findViewById(R.id.routeInit_price);
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if ((keyCode == KeyEvent.KEYCODE_BACK)) {
if(priceField.getText().toString().length() > 0)
return super.onKeyDown(keyCode, event);
else
return true;
}
return false;
}
});
回答4:
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:digits="0123456789"
android:scrollHorizontally="true"
android:singleLine="true"
android:textSize="14sp" />
来源:https://stackoverflow.com/questions/18101407/android-numeric-key-register-backspace-pressed