如何在 Android 中检查软件键盘的可见性?

2022-07-22  本文已影响0人  安安_660c

键盘是任何 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?

上一篇下一篇

猜你喜欢

热点阅读