如何在 Android 中检查软件键盘的可见性?
键盘是任何 Android 应用程序的基本元素之一。通常,我们使用键盘从用户那里获取输入。在 Android 应用程序中使用的这些键盘称为软键盘,Android 系统为您提供键盘,用于在任何 EditText 或类似内容中获取用户的输入。此外,如果用户给出了输入,那么该键盘将从屏幕上变得不可见。因此,在本博客中,我们将学习如何检查软件键盘是否在 Android 应用程序中可见。如果它是可见的,那么如何使这个键盘不可见或如何关闭键盘。那么,让我们开始吧。
在 Android Studio 中创建一个新项目并根据您的选择为其命名。就我而言,我使用HideKeyboard作为我的项目名称。
和往常一样,在 Android Studio 中创建项目后,我们的下一个任务是添加应用程序的 UI。因此,在activity_main.xml文件中,添加以下代码:
<?xml version = "1.0" encoding = "utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/rootview"
tools:context=".MainActivity">
<EditText
android:id="@+id/editext"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginEnd="8dp"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginStart="8dp">
</EditText>
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hide Keyboard"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
在为 UI 部分编写代码之后,现在让我们继续讨论应用程序的逻辑部分。
所以,这里我们将使用viewTreeObserver的概念。在 viewTreeObserver 的帮助下,我们可以发现特定活动中的 viewGroup 是否有一些变化。之后,我们可以找到当前屏幕的高度,然后是键盘的高度,通过这个高度我们可以确定键盘是否可见。那么,让我们看一下MainActivity.kt文件的代码:
class MainActivity : AppCompatActivity(), View.OnClickListener {
lateinit var constraintLayout:ConstraintLayout
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
var button = findViewById<Button>(R.id.button)
val editText = findViewById<EditText>(R.id.editext)
editText.requestFocus()
constraintLayout = findViewById(R.id.rootview)
constraintLayout.viewTreeObserver.addOnGlobalLayoutListener {
val rec = Rect()
constraintLayout.getWindowVisibleDisplayFrame(rec)
//finding screen height
val screenHeight = constraintLayout.rootView.height
//finding keyboard height
val keypadHeight = screenHeight - rec.bottom
if (keypadHeight > screenHeight * 0.15) {
Toast.makeText(this@MainActivity, "VISIBLE KEYBOARD", Toast.LENGTH_LONG).show()
} else {
Toast.makeText(this@MainActivity, "NO KEYBOARD", Toast.LENGTH_LONG).show()
}
}
button.setOnClickListener(this)
}
@RequiresApi(api = Build.VERSION_CODES.O)
override fun onClick(v:View) {
when (v.id) {
R.id.button -> hideSoftkeybard(v)
}
}
//function to hide keyboard
private fun hideSoftkeybard(v:View) {
val inputMethodManager = getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
inputMethodManager.hideSoftInputFromWindow(v.windowToken, 0)
}
}
在这里,如果在单击按钮时键盘可见,我们使用 hideSoftKeyboard 隐藏键盘。
因此,最后,运行应用程序并在您的移动设备上查看输出。
在这篇文章中,我们学习了如何检查键盘在屏幕上是否可见。此外,如果键盘可见,我们还有如何关闭它。
作者:Admin MindOrks
链接:How to check the visibility of software keyboard in Android?