android - 在 Android 上关闭键盘后返回沉浸模式

标签 android keyboard android-4.4-kitkat

我将沉浸式模式添加到我的应用中。这是代码:

 @Override
 public void onWindowFocusChanged(boolean hasFocus) {
     super.onWindowFocusChanged(hasFocus);
     if (hasFocus)
     {
         getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                 | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                 | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                 | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                 | View.SYSTEM_UI_FLAG_FULLSCREEN
                 | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
     }
 }

但如果我在键盘上键入并关闭它(使用后退按钮,通过单击屏幕),导航栏保持显示状态,我需要减少/重新打开应用程序以恢复沉浸式模式。

关闭键盘后如何返回沉浸模式?

编辑:这是一个 Cordova 应用

最佳答案

我使用处理程序来检测用户不活动并随后隐藏系统用户界面。它会自动检测用户是否在屏幕上进行交互,然后在 5 秒后自动隐藏系统 UI

//Declare handler
private var timeoutHandler: Handler? = null
private var interactionTimeoutRunnable: Runnable? = null

在 onCreate() 中

  @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
. . .

       //Initialise handler
        timeoutHandler =  Handler();
        interactionTimeoutRunnable =  Runnable {
            // Handle Timeout stuffs here
            hideSystemUI()
        }

        //start countdown
        startHandler()

. . .

处理焦点变化的方法

    override fun onWindowFocusChanged(hasFocus: Boolean) {
        super.onWindowFocusChanged(hasFocus)
        if (hasFocus) hideSystemUI()
    }

隐藏系统界面

    private fun hideSystemUI() {
        // Enables regular immersive mode.
        // For "lean back" mode, remove SYSTEM_UI_FLAG_IMMERSIVE.
        // Or for "sticky immersive," replace it with SYSTEM_UI_FLAG_IMMERSIVE_STICKY
        window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_IMMERSIVE
                // Set the content to appear under the system bars so that the
                // content doesn't resize when the system bars hide and show.
                or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                // Hide the nav bar and status bar
                or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                or View.SYSTEM_UI_FLAG_FULLSCREEN)
    }


    // Shows the system bars by removing all the flags
// except for the ones that make the content appear under the system bars.
    private fun showSystemUI() {
        window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN)
    }



// reset handler on user interaction
override fun onUserInteraction() {
    super.onUserInteraction()
    resetHandler()
}

//restart countdown
fun resetHandler() {
    timeoutHandler!!.removeCallbacks(interactionTimeoutRunnable);
    timeoutHandler!!.postDelayed(interactionTimeoutRunnable, 5*1000); //for 10 second

}

// start countdown
fun startHandler() {
    timeoutHandler!!.postDelayed(interactionTimeoutRunnable, 5*1000); //for 10 second
}

关于android - 在 Android 上关闭键盘后返回沉浸模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23456144/

相关文章:

java - 如何重新启动或恢复 Activity

android - 如何将纹理渲染到 Android GLSurfaceView

Android 应用程序在实现数字选择器对话框后停止工作

vb.net - Application1 已停止工作

android - 隐藏和显示软键盘 - 同时

android - 为什么 OS X (Yosemite) 上的 Android Studio 1.0.1 无法下载 SDK 组件?

ios - 在不引用文本字段的情况下关闭键盘

android - 如何让一个应用程序不被 Android KitKat 用户下载?

android - isValidFragment Android API 19

Android Jsoup 解析器在 kitkat 上非常慢