Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 导航抽屉打开时如何关闭键盘?_Android_Android Fragments_Slidingdrawer - Fatal编程技术网

Android 导航抽屉打开时如何关闭键盘?

Android 导航抽屉打开时如何关闭键盘?,android,android-fragments,slidingdrawer,Android,Android Fragments,Slidingdrawer,我已将导航抽屉添加到我的应用程序中。到目前为止,其他一切工作正常,但我有一个问题,当导航抽屉打开时,键盘没有关闭。导航抽屉是主要活动,然后从抽屉打开的每个页面都是一个片段 我已尝试将以下内容添加到片段中的每个EditText区域。然而,这并不是结束任何事情 InputMethodManager imm1 = (InputMethodManager)getActivity().getSystemService( Context.INPUT_METHOD_SERVICE);

我已将导航抽屉添加到我的应用程序中。到目前为止,其他一切工作正常,但我有一个问题,当导航抽屉打开时,键盘没有关闭。导航抽屉是主要活动,然后从抽屉打开的每个页面都是一个片段

我已尝试将以下内容添加到片段中的每个EditText区域。然而,这并不是结束任何事情

InputMethodManager imm1 = (InputMethodManager)getActivity().getSystemService(
            Context.INPUT_METHOD_SERVICE);
        imm1.hideSoftInputFromWindow(input1.getWindowToken(), 0);

我也尝试过将代码放在主活动中,但也没有成功。关于我可以采取哪些不同的措施来实现这一点,您有什么想法吗?

在您的抽屉布局中添加一个。然后,您可以使用上面的代码关闭onDrawerOpened()方法中的键盘

试试这段代码,我会在我的应用程序中使用它,例如,如果我打开一个包含编辑文本的对话框 我在create中设置了这段代码。希望这有帮助


getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT\u输入\状态\始终\隐藏)

这对我来说非常有效:

private ActionBarDrawerToggle aDrawerToggle;
private DrawerLayout aDrawerLayout;
创建类后,我将在空白处使用此代码:

        aDrawerToggle = new ActionBarDrawerToggle(getActivity(), 
        aDrawerLayout, 
        R.drawable.main_icon, 
        R.string.drawer_open, 
        R.string.drawer_close){

        @Override
        public void onDrawerClosed(View drawerView) {
            super.onDrawerClosed(drawerView);
            if (!isAdded()) {
                return;
            }

            InputMethodManager inputMethodManager = (InputMethodManager)getActivity().getSystemService(
                    Context.INPUT_METHOD_SERVICE);


            //inputSearch is my EditText
            inputMethodManager.hideSoftInputFromWindow(inputSearch.getWindowToken(), 0);

            getActivity().supportInvalidateOptionsMenu();
        }
}

要在打开或关闭导航抽屉时隐藏打开的键盘,请覆盖
onDrawerListner
中的方法
onDrawerSlide
,并添加以下行

InputMethodManager inputMethodManager = (InputMethodManager) actionBarActivity
    .getSystemService(Activity.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(
    actionBarActivity.getCurrentFocus().getWindowToken(),
    0
);
//如果滑块打开,请不要执行任何操作 } 其他的 { 如果(查看EditText的实例){ 视图w=getCurrentFocus(); int scrcoords[]=新int[2]; w、 getLocationOnScreen(scrcoords); float x=ev.getRawX()+w.getLeft()-scrcoords[0]; float y=ev.getRawY()+w.getTop()-scrcoords[1]

        if (ev.getAction() == MotionEvent.ACTION_UP && (x < w.getLeft() || x >= w.getRight() || y < w.getTop() || y > w.getBottom())) {
            InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(getWindow().getCurrentFocus().getWindowToken(), 0);
        }
    }

        return ret;

    }
if(ev.getAction()==MotionEvent.ACTION_UP&&(x=w.getRight()| | yw.getBottom()){
InputMethodManager imm=(InputMethodManager)getSystemService(Context.INPUT\u方法\u服务);
imm.hideSoftInputFromWindow(getWindow().getCurrentFocus().getWindowToken(),0);
}
}
返回ret;
}
在onCreate中:

DrawerLayout drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawerLayout.setDrawerListener(new DrawerLayout.DrawerListener() {
            @Override
            public void onDrawerSlide(View drawerView, float slideOffset) {
            }

            @Override
            public void onDrawerOpened(View drawerView) {
            }

            @Override
            public void onDrawerClosed(View drawerView) {
            }

            @Override
            public void onDrawerStateChanged(int newState) {
                InputMethodManager imm = (InputMethodManager)getSystemService(Context.
                        INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
            }
        });

因为,drawer.setDrawerListener(toggle)不推荐使用。使用drawer.addDrawerListener(切换),如下所述

私有void initDrawerLayout(){


谢谢你的回答,我很感谢你花时间。我已经试着自己设置了这个,但我不了解具体的实现。你能给我一个代码片段说明应该如何做吗?我的搜索到目前为止还没有结果。我一直在使用谷歌版本的抽屉。你在使用支持库的抽屉布局吗?如果您可以这样做,只需在xml文件中为DroperLayout指定一个id,然后通过使用“DroperLayout mDrawerLayout=(DroperLayout)findViewById(R.id.MyDroperLayout);”在活动中获取DroperLayout的实例。然后您可以这样实现它:mDrawerLayout.setDroperLayout(new DroperListener(){…//重写这里的方法…});是的,我正在使用支持库中的抽屉布局。但是,我显然有我的“Dunce”上限,因为每次我尝试实现您提到的代码时都会出错。findViewById已设置为抽屉布局id,因此我尝试设置新的侦听器,也就是在出现错误时,我在新侦听器上也会出错(表示new是无效类型).我想这只是我做错了什么,但如果我现在能弄清楚的话,那就糟了。谢谢你的帮助。好的。终于把抽屉式速记器设置好了,没有任何错误。:D但是在隐藏键盘方面仍然有问题。我的主要活动中没有任何edittext字段,只有片段有。所以我不能说“(EditText.getWindowToken,0);。删除EditText部分后,会出现一个错误,显示getWindowToken未定义。:/只需写“MyActivity activity=(MyActivity)getActivity;”,然后写“activity.setTheEditText(someEditText)”“那么你的活动就会知道编辑文本谢谢你的回答,我感谢你花时间回答。当我将它添加到我的应用程序时,这对我没有任何帮助,所以我假设我做错了什么。使用此选项时,片段视图将失去焦点,然后焦点将在片段第一个可聚焦视图中,有没有办法避免另一个问题是在
onDrawerSlide
方法调用中,这个随机显示的视图(在我的例子中,是提交功能的按钮)将出现在屏幕上,就像使用
android:windowSoftInputMode=“adjustResize”一样“
这就是我最终能够工作的原因。谢谢。当然,请将此代码添加到onCreate方法中,并且无论何时滑动以打开抽屉/抽屉打开时,键盘也会隐藏,请不要忘记在onCreate中声明工具栏。对于我来说,它足以覆盖
onDrawerOpened()
DrawerLayout drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawerLayout.setDrawerListener(new DrawerLayout.DrawerListener() {
            @Override
            public void onDrawerSlide(View drawerView, float slideOffset) {
            }

            @Override
            public void onDrawerOpened(View drawerView) {
            }

            @Override
            public void onDrawerClosed(View drawerView) {
            }

            @Override
            public void onDrawerStateChanged(int newState) {
                InputMethodManager imm = (InputMethodManager)getSystemService(Context.
                        INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
            }
        });
final DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle  actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close) {
        @Override
        public void onDrawerClosed(View drawerView) {
            super.onDrawerClosed(drawerView);
       }

        @Override
        public void onDrawerOpened(View drawerView) {
            super.onDrawerOpened(drawerView);
            InputMethodManager inputMethodManager = (InputMethodManager)
                    getSystemService(Context.INPUT_METHOD_SERVICE);
            inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
        }

        @Override
        public void onDrawerSlide(View drawerView, float slideOffset) {
            super.onDrawerSlide(drawerView, slideOffset);
            InputMethodManager inputMethodManager = (InputMethodManager)
                    getSystemService(Context.INPUT_METHOD_SERVICE);
            inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
        }
    };
    drawer.setDrawerListener(actionBarDrawerToggle);
    actionBarDrawerToggle.syncState();
    drawer = findViewById(R.id.drawer_layout);
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle
            (this, drawer, toolbar,
                    R.string.navigation_drawer_open,
                    R.string.navigation_drawer_close)
    {
        @Override
        public void onDrawerClosed(View drawerView) {
            super.onDrawerClosed(drawerView);
            InputMethodManager inputMethodManager = (InputMethodManager)
                    getSystemService(Context.INPUT_METHOD_SERVICE);
            inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
        }

        @Override
        public void onDrawerOpened(View drawerView) {
            super.onDrawerOpened(drawerView);
            InputMethodManager inputMethodManager = (InputMethodManager)
                    getSystemService(Context.INPUT_METHOD_SERVICE);
            inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
        }
    };
    drawer.addDrawerListener(toggle);
    toggle.syncState();
    drawer.closeDrawer(GravityCompat.START);
}