OnFocus问题并隐藏了软键盘

时间:2012-02-25 03:31:01

标签: android android-softkeyboard onfocus soft-keyboard onclicklistener

我一直在网上看了一段时间,以确保这里没有其中一个,但由于某种原因我似乎无法找到完成这项工作的确切方法,经过4个小时的尝试我想通了我会问专家。

我现在有了我的班级,假设在加载窗口时有一个onFocusChangeListener,当我点击我的背景时会触发该窗口,导致软键盘被隐藏。

所以缺点是:当我点击我的背景并隐藏键盘时,如何修复我的课程。

到目前为止,这是我的代码:(请记住,我的布局既可关注又可点击)

package com.example.haymaker;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;

public class addAppointment extends Activity{

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.appointment);
    final EditText appointmentName = (EditText) findViewById(R.id.editText1);

    appointmentName.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (!hasFocus) {
                InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(appointmentName.getWindowToken(), 0);

            }
        }
    });


    }

}

感谢您的协助

2 个答案:

答案 0 :(得分:0)

这有点不寻常,android模式通常是让用户使用后退按钮关闭键盘。

如果您真的想在触摸编辑文本之外时关闭它,可以将onTouch侦听器添加到主视图并隐藏键盘:

findViewById(R.id.you_main_view).setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View view, MotionEvent e){
        if (e.getAction() == MotionEvent.ACTION_UP) hideSoftKeyboard();
        return false;
    }
}

这有点棘手,因为您的包含视图可能无法处理触摸本身的子视图(例如列表视图)。您可能必须向不同的视图添加几个类似的触摸侦听器,以使整个屏幕注册命中。确保您的触摸侦听器返回false,否则他们将吞下您希望在其他地方处理的点击。

答案 1 :(得分:0)

不要使用onFocuschanged侦听器。 。只需为Outter图层实现OnTouchListener,就像LinearLayout一样,覆盖整个屏幕。在那个事件中隐藏键盘。

参见此示例:

    MainActivity.java
package com.at.keyboardhide;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.View.OnTouchListener;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.LinearLayout;

import com.at.bugsfixing.R;

public class MainActivity extends Activity implements OnTouchListener{
 private EditText getEditText;
 private LinearLayout getLinearLayout;
 @Override
 public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 this.getWindow().setSoftInputMode(
 WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
 requestWindowFeature(Window.FEATURE_NO_TITLE);
 setContentView(R.layout.keyboardmain);
 getEditText = (EditText)findViewById(R.id.editText1);
 getLinearLayout = (LinearLayout)findViewById(R.id.LinearLayout01);
 getLinearLayout.setOnTouchListener(this);
 }
 @Override
 public boolean onTouch(View v, MotionEvent event) {
 if(v==getLinearLayout){
 InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
 imm.hideSoftInputFromWindow(getEditText.getWindowToken(), 0);
 return true;
 }
 return false;
 } 
} 

它对我来说非常完美,希望它也能帮到你。

享受。 :)