如何在编辑文本之外只需轻按一下键盘?

Rey*_*deh 7 keyboard android android-edittext

我想通过在edittext外面点击来隐藏键盘.这是我的xml代码:

<RelativeLayout
android:clickable="true"
android:focusable="true"
android:focusableInTouchMode="true"
android:onClick="rl_main_onClick">
<RelativeLayout
  //Here there are some widgets including some edittext.
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

这是我的java代码(MainActivity):

public void rl_main_onClick(View view) {
    InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
}
Run Code Online (Sandbox Code Playgroud)

但我必须点击两次才能隐藏键盘.第一次点击只是改变"下一步"(对于最后一个编辑文本它是"完成")输入图标,然后第二次点击隐藏键盘.这是第一次点击时发生的事情:

第一次点击是做什么的.

现在我有两个问题:

1-如何只需轻按一下即可修复并隐藏键盘?

2-是否可以对我的所有edittext(一个代码)进行此操作?

提前致谢.

Mar*_*rat 11

试图取代onClickonTouch.为此,您需要更改您的布局属性,如下所示:

<RelativeLayout
    android:id="@+id/relativeLayout"
    android:clickable="true"
    android:focusable="true"
    android:focusableInTouchMode="true">

    <RelativeLayout>

        // widgets here

    </RelativeLayout>

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

然后删除rl_main_onClick(View view) {...}方法并在其中插入onTouch监听器方法onCreate():

findViewById(R.id.relativeLayout).setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
        return true;
    }
});
Run Code Online (Sandbox Code Playgroud)