当显示软键盘时按下后退按钮时清除焦点EditText

时间:2011-09-04 15:06:14

标签: android focus android-edittext android-softkeyboard back-button

我知道这里有很多关于这个问题的问题。但他们中没有人能得到我正在寻找的答案。

我在ScrollView中有7个ET。当我启动应用程序时,没有ET有焦点,因为我在我的整体布局中添加了以下两行:

android:focusable="true"
android:focusableInTouchMode="true"

当我点击ET时,会显示我想要的软键盘,然后我设置了值(比方说20)。我按下'2'后跟'0'然后按后退按钮。此时键盘消失,但焦点仍然存在。当按下后退按钮隐藏键盘时,我也希望清除焦点。

因为当焦点被清除时,ET的布局设置得像我想要的那样。

他们都有一些代码,即:

    // Right Cable
    RightCable = (EditText) findViewById (R.id.RightCable);
    RightCable.setRawInputType(Configuration.KEYBOARD_12KEY);
    RightCable.setOnFocusChangeListener(FocusChanged);
    RightCable.addTextChangedListener(new TextWatcher() {
        public void afterTextChanged(Editable s) {
            if(RightCable.isFocused()){
                LengthRightCable       = Double.parseDouble(RightCable.getText().toString());
                Calculate();
            }
        }
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            if(s.toString().matches("")) {
                RightCable.setText("0.00");
                Selection.setSelection(RightCable.getText(), 0, 4);
            }
        }
    });

我使用焦点监听器将ET的输入更改为5.00而不是0的数字。

OnFocusChangeListener FocusChanged = new OnFocusChangeListener() {

    public void onFocusChange(View v, boolean hasFocus) {

        EditText et = (EditText) v;

        et.setSelection(0, et.getText().length());

        if(!hasFocus){
            String userInput = et.getText().toString();

            int dotPos = -1;    

            for (int i = 0; i < userInput.length(); i++) {
                char c = userInput.charAt(i);
                if (c == '.') {
                    dotPos = i;
                }
            }

            if (dotPos == -1){
                et.setText(userInput + ".00");
            } else if(userInput.length() < 5) {
                if ( userInput.length() - dotPos == 1 ) {
                    et.setText(userInput + "00");
                } else if ( userInput.length() - dotPos == 2 ) {
                    et.setText(userInput + "0");
                }
            }
        }
    }

};

2 个答案:

答案 0 :(得分:0)

为此,您必须在布局文件的父布局上使用onTouchListener。在TouchListener上,您必须编码以在EditText外部单击时隐藏键盘。请按照以下XML布局和Java类来解决此问题。

请按照以下网址进行操作,以解决此问题http://amitthaperandroidquery.blogspot.com/2011/10/remove-keyboard-after-click-outside.html

答案 1 :(得分:0)

 Just override `onBackPressed()` 

您活动中的方法并检查 Edittext 的条件 跑前专注 super.onBackPressed();

 @Override
            public void onBackPressed() {
        
                if( et_search.isFocused()){
                    et_search.clearFocus();
                }else {
                    super.onBackPressed();
                }
            }