2013-02-04 51 views
9

当我更改碎片时。我正在使用它来关闭键盘,因为屏幕上有一个EditText字段。我只是觉得必须有更好的方法,但是我没有发现任何检测键盘是否在屏幕上的东西。Android更改碎片时隐藏键盘

Activity activity = getActivity(); 
InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE); 
try 
{ 
    inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0); 
} 
catch (Exception e) 
{ 

} 
+0

这是很难检测键盘的API真的只允许你触发键盘。 –

回答

0

我能想到的唯一现实的方法是使用onConfigurationChanged(Configuration config)法:KeyboardHiddenConfiguration

组合应该这样做。

class MyFrag extends Fragment{ 

    @Override 
    public void onConfigurationChanged(Configuration config){ 
    //Check flags 
    switch(config.keyboardHidden){ 
     case KEYBOARDHIDDEN_NO: 
     // do something 
     break; 
     case KEYBOARDHIDDEN_YES: 
     break; 
    } 
    } 

} 

当然,这依赖于你有清单和家长活动接受这些作为配置的变化:

<activity ... 
    android:configChanges="keyboardHidden|orientation|screenSize|screenLayout"/> 

您还会注意到的Activity具有相同的重写的方法,该活动将得到方法,然后将其传递给所附的Fragment s。

对于细心的你可以利用上下文来对飞这样做:

Configuration config = getResources().getConfiguration(); 

希望帮助,它的意思是考虑到hardKeyboards为好,但是我相信你会碰到一些特定的设备错误!

3

在您实现调用各种碎片的活动,把下面的...

InputMethodManager imm = (InputMethodManager)this.getSystemService(Context.INPUT_METHOD_SERVICE); 
    imm.hideSoftInputFromWindow(getWindow().getDecorView().getWindowToken(), 0);