Android: Numeric key register backspace pressed

喜欢而已 提交于 2019-12-11 22:16:38

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!