高斋晓开卷,独共圣人语。这篇文章主要讲述使用Kotlin关闭/隐藏Android软键盘相关的知识,希望能为你提供帮助。
我正在尝试在Kotlin中编写一个简单的android应用程序。我的布局中有一个EditText和一个Button。在编辑字段中写入并单击按钮后,我想隐藏虚拟键盘。
有一个流行的问题Close/hide the Android Soft Keyboard关于在java中这样做,但据我所知,应该有一个替代版本的Kotlin。我该怎么办?
答案我想我们可以稍微提高Viktor的答案。基于它始终附加到视图,将有上下文,如果有上下文,则有InputMethodManager
fun View.hideKeyboard() {
val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(windowToken, 0)
}
在这种情况下,上下文自动表示视图的上下文。你怎么看?
另一答案在“活动”,“片段”中使用以下实用程序功能隐藏软键盘。
(*)最新Kotlin版本的更新
fun Fragment.hideKeyboard() {
view?.let { activity?.hideKeyboard(it) }
}fun Activity.hideKeyboard() {
hideKeyboard(if (currentFocus == null) View(this) else currentFocus)
}fun Context.hideKeyboard(view: View) {
val inputMethodManager = getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager
inputMethodManager.hideSoftInputFromWindow(view.windowToken, 0)
}
老答案:
fun Fragment.hideKeyboard() {
activity.hideKeyboard(view)
}fun Activity.hideKeyboard() {
hideKeyboard(if (currentFocus == null) View(this) else currentFocus)
}fun Context.hideKeyboard(view: View) {
val inputMethodManager = getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager
inputMethodManager.hideSoftInputFromWindow(view.windowToken, 0)
}
这将关闭键盘,无论您的代码如何在对话框片段和/或活动等。
活动/片段中的用法:
hideKeyboard()
另一答案只需在您的活动中覆盖此方法即可。它将自动在其子片段中工作.....
在JAVA
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (getCurrentFocus() != null) {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
}
return super.dispatchTouchEvent(ev);
}
在科特林
override fun dispatchTouchEvent(ev: MotionEvent?): Boolean {
if (currentFocus != null) {
val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(currentFocus!!.windowToken, 0)
}
return super.dispatchTouchEvent(ev)
}
投票如果它适合你....谢谢......
另一答案Peter的解决方案通过扩展View类的功能来解决问题。替代方法可以是扩展Activity类的功能,从而将隐藏键盘的操作绑定到View的容器而不是View本身。
fun Activity.hideKeyboard() {
val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(findViewById(android.R.id.content).getWindowToken(), 0);
}
另一答案您可以使用Anko使生活更轻松,因此该行将是:
inputMethodManager.hideSoftInputFromWindow(view.windowToken, 0)
或者更好的创建扩展功能:
fun View.hideKeyboard(inputMethodManager: InputMethodManager) {
inputMethodManager.hideSoftInputFromWindow(windowToken, 0)
}
【使用Kotlin关闭/隐藏Android软键盘】并称之为:
view?.hideKeyboard(activity.inputMethodManager)
另一答案我在这里找到了适合我的答案:http://programminget.blogspot.com/2017/08/how-to-close-android-soft-keyboard.html
val inputManager:InputMethodManager = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
inputManager.hideSoftInputFromWindow(currentFocus.windowToken, InputMethodManager.SHOW_FORCED)
另一答案这适用于API 26。
val view: View = if (currentFocus == null) View(this) else currentFocus
val inputMethodManager = getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager
inputMethodManager.hideSoftInputFromWindow(view.windowToken, 0)
另一答案创建一个名为Utils的对象类:
object Utils {fun hideSoftKeyBoard(context: Context, view: View) {
try {
val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm?.hideSoftInputFromWindow(view.windowToken, InputMethodManager.HIDE_NOT_ALWAYS)
} catch (e: Exception) {
// TODO: handle exception
e.printStackTrace()
}}
}
您可以在要隐藏软输入键盘的任何类中使用此方法。我在我的
BaseActivity
中使用它。这里的视图是您在布局中使用的任何视图:
Utils.hideSoftKeyBoard(this@BaseActivity, view )
另一答案您可以使用下面的代码,我在我的片段中写下以下代码:
private val myLayout = ViewTreeObserver.OnGlobalLayoutListener {
yourTextView.isCursorVisible = KeyboardTool.isSoftKeyboardShown(myRelativeLayout.rootView)
}
然后在
onViewCreated
的fragment
:......
super.onViewCreated(view, savedInstanceState)
myRelativeLayout.viewTreeObserver.addOnGlobalLayoutListener(myLayout)
......
在
onDestroyView
也使用:override fun onDestroyView() {
super.onDestroyView()
myRelativeLayout.viewTreeObserver.removeOnGlobalLayoutListener(myLayout)
}
和:
object KeyboardTool {
fun isSoftKeyboardShown(rootView: View): Boolean {
val softKeyboardHeight = 100
val rect = Rect()rootView.getWindowVisibleDisplayFrame(rect)val dm = rootView.resources.displayMetrics
val heightDiff = rootView.bottom - rect.bottom
return heightDiff >
softKeyboardHeight * dm.density
}
}
推荐阅读
- Win10应用商店显示挂起的处理办法
- 如何修复无法找到参数[project'(app']的方法实现())
- 如何在Android中正确设置谷歌播放登录()
- XmlPullParser - 意外令牌(android)
- 以有效的方式管理android片段创建()
- 当我正在尝试为我正在通过Unity开发的游戏构建apk文件时,Android SDK未正确安装错误()
- 如何从Android-x86中的命令行启动GUI
- 访问设备/模拟器文件系统在Android Studio中
- 如何在Android应用程序中添加垂直滚动条( [关闭])