根據 Android官方文件可在程式中隱藏Navigation Bar
MainActivity.kt1 2 3 4
| window.decorView.apply { systemUiVisibility = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN }
|
但使用滑鼠點擊後,會顯示Navigation Bar,必須再呼叫此函式再將Navigation Bar隱藏起來即可。
何時觸發便是本篇所要談論的重點
我們先將之前Hide Navigation Bar的程式碼寫成函式:hideNavigationBar()。
MainActivity.kt1 2 3 4 5 6
| private fun hideNavigationBar() { window.decorView.apply { systemUiVisibility = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN } }
|
利用偵測螢幕大小的變化,當作觸發的時機。
MainActivity.kt1 2 3 4 5 6 7 8 9 10 11
| override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) var relativeLayout = findViewById<RelativeLayout>(R.id.main_view) relativeLayout.addOnLayoutChangeListener( View.OnLayoutChangeListener { v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom ->
}) }
|
但由於OnLayoutChangeListener為Callback函式,處理UI變化時,不可在函式中處理。
所以我們必須創建一個Handler來呼叫hideNavigationBar函式
Source Code
MainActivity.kt1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| class MainActivity : AppCompatActivity() { private var mUiHandler : UiHandler? = null private val HANDLER_HIDE_NAVIGATION_BAR = 1
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) mUiHandler = UiHandler(this)
var relativeLayout = findViewById<RelativeLayout>(R.id.main_view) relativeLayout.addOnLayoutChangeListener( View.OnLayoutChangeListener { v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom -> if (bottom < oldBottom){ mUiHandler!!.sendEmptyMessageDelayed( HANDLER_HIDE_NAVIGATION_BAR, 3000) } }) hideNavigationBar() }
private fun hideNavigationBar() { window.decorView.apply { systemUiVisibility = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN } }
private inner class UiHandler(obj: MainActivity) : Handler() { private val mObj: WeakReference<MainActivity> = WeakReference(obj) override fun handleMessage(msg: Message) { super.handleMessage(msg) when(msg.what) { HANDLER_HIDE_NAVIGATION_BAR -> { hideNavigationBar() } } } } }
|
activity_main.xml1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/main_view" tools:context=".MainActivity">
<TextView android:id="@+id/test" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="Hello World!" /> </RelativeLayout>
|