在触摸外部编辑文本区域时隐藏android中的键盘

Nit*_*ael 10 eclipse android android-keypad ontouchlistener android-edittext

我知道在android中解雇键盘的代码是

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);
Run Code Online (Sandbox Code Playgroud)

如果我们触摸文本区域之外的区域而不是屏幕中的键盘,任何人都可以建议我隐藏键盘的方法.

Sha*_*lee 15

关闭Softkeyboard的代码如下:

public static void hideSoftKeyboard(Activity activity) {
    InputMethodManager inputMethodManager = (InputMethodManager)  activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
    inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
}
Run Code Online (Sandbox Code Playgroud)

您可以将它放在Utility Class中,或者如果您在活动中定义它,请避开activity参数,或者调用hideSoftKeyboard(this).

您可以编写一个迭代活动中每个View的方法,并检查它是否是EditText的一个实例,如果它没有将setOnTouchListener注册到该组件,那么一切都将落实到位.如果你想知道如何做到这一点,事实上它很简单.这是你做的,你写一个递归方法,如下所示.

public void setupUI(View view) {

    //Set up touch listener for non-text box views to hide keyboard.
    if(!(view instanceof EditText)) {

        view.setOnTouchListener(new OnTouchListener() {

            public boolean onTouch(View v, MotionEvent event) {
                hideSoftKeyboard();
                return false;
            }

        });
    }

    //If a layout container, iterate over children and seed recursion.
    if (view instanceof ViewGroup) {

        for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {

            View innerView = ((ViewGroup) view).getChildAt(i);

            setupUI(innerView);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

之后,调用此方法SetcontentView()与PARAMET为id您的看法一样的:

RelativeLayoutPanel android:id="@+id/parent"> ... </RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

然后打电话 setupUI(findViewById(R.id.parent))

  • http://stackoverflow.com/questions/4165414/how-to-hide-soft-keyboard-on-android-after-clicking-outside-edittext的副本 (12认同)

Jay*_*ala 7

你可以使用的最好的方法是除了EditText之外的DONE按钮让你的onClickListener做,

done.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View arg0) {
        InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);
}
});
Run Code Online (Sandbox Code Playgroud)


ral*_*abb 6

这可能是旧的,但我通过实现自定义类来实现这一点

public class DismissKeyboardListener implements OnClickListener { 

    Activity mAct;

    public DismissKeyboardListener(Activity act) {
        this.mAct = act;
    } 

    @Override 
    public void onClick(View v) {
        if ( v instanceof ViewGroup ) {
            hideSoftKeyboard( this.mAct );
        } 
    }        
} 

public void hideSoftKeyboard(Activity activity) {
        InputMethodManager imm = (InputMethodManager)
        getSystemService(Activity.INPUT_METHOD_SERVICE);
        imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);
} 
Run Code Online (Sandbox Code Playgroud)

这里的最佳实践是创建一个Helper类,每个容器相对/线性布局都应该实现这一点.

****请注意只有主要容器应该实现这个类(用于优化)****

并像这样实现它:

Parent.setOnClickListener( new DismissKeyboardListener(this) ); 
Run Code Online (Sandbox Code Playgroud)

关键字this是Activity.所以,如果你是片段,你就像getActivity();

---竖起大拇指,如果它对你有帮助...... ---欢呼拉尔夫---