Can't Use 'window' Outside Activity In Kotlin

Viewed 167

Hello I Don't Want To Declare The Same Function Over And Over. So I Wanted To Declare The Following Function At The Top Level Of A File.

package com.something.something

import android.view.View

fun enable_immersive_sticky_mode() {
    window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
            or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
            or View.SYSTEM_UI_FLAG_FULLSCREEN)
}

But It Gives Me This Error Unresolved Reference Window. But When I put It Inside An Activity It Works. But I Want To Declare It At The Top Level Of The File. Can Anyone Help Me Please.

2 Answers

You can pass activity as argument

fun enable_immersive_sticky_mode(activity: Activity) {
    activity.window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
            or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
            or View.SYSTEM_UI_FLAG_FULLSCREEN)
}

when using in activity write enable_immersive_sticky_mode(this)

You can create an abstract BaseActivity class that extends Activity and to implement the sticky mode in the onCreate method:

abstract class BaseActivity : AppCompatActivity() {

   override fun onCreate(savedInstanceState: Bundle?) {
     super.onCreate(savedInstanceState)
     enable_immersive_sticky_mode()
   }
}

Then, You can extend every activity with the BaseActivity:

class ExampleActivity : BaseActivity()
Related