1

我已经在网上找了一段时间了,以确保这里还没有这些,但由于某种原因,我似乎找不到完成这项工作的确切方法,经过 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);

            }
        }
    });


    }

}

感谢你的协助

4

2 回答 2

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,否则它们会吞下您希望在其他地方处理的点击。

于 2012-02-25T03:57:46.433 回答
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;
 } 
} 

它对我来说很完美,希望它也能帮助你。

享受。:)

于 2012-02-25T04:25:20.793 回答