我在一个活动中托管了几个片段。当某些片段关闭时,有必要隐藏键盘(如果打开),通常通过将onOptionsItemSelected从活动链接到片段来完成
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
android.R.id.home -> {
UiUtil.hideKeyboard(activity)
return true
}
else -> return super.onOptionsItemSelected(item)
}
}
但是,当使用导航体系结构组件时,它看起来确实很糟糕。 有什么简单的方法可以隐藏带有Navigation Architecture Component的键盘吗?
答案 0 :(得分:4)
我想确保每次更改目的地时都隐藏键盘。所以我做这样的事情:
class MainActivity :
AppCompatActivity(R.layout.activity_main),
NavController.OnDestinationChangedListener
{
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
findNavController(R.id.mainNavHostFragment).addOnDestinationChangedListener(this)
}
override fun onDestroy() {
super.onDestroy()
findNavController(R.id.mainNavHostFragment).removeOnDestinationChangedListener(this)
}
override fun onDestinationChanged(
controller: NavController,
destination: NavDestination,
arguments: Bundle?
) {
currentFocus?.hideKeyboard()
}
fun View.hideKeyboard() {
val imm = context.getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(windowToken, 0)
}
}
答案 1 :(得分:0)
这应该可以工作(我通常在OnClickListeners中使用它):
InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Activity.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);