📱
Android : Activityを継承して共通処理をまとめる
はじめに
業務用のAndroidアプリをつくる際に、ツールバーやナビゲーションバーを表示しない(フルスクリーン化)設定をActivityごとに記述していました。どの画面にも共通化できる処理なので、何か方法はないかと探していました。その共通化のやり方について書き残します。
実装方法
フルスクリーン化の処理
ナビゲーションバーやステータスバーの非表示にしてフルスクリーン化する処理は下記で解説しています。
BaseActivityによる共通化
まず共通化する処理をopen class(継承可能なクラス)に記述する。
// 継承可能なクラスとしてopenをつける
open class BaseActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
window.decorView.windowInsetsController?.apply {
// systemBars : Status barとNavigation bar両方
hide(WindowInsets.Type.systemBars())
// hide(WindowInsets.Type.statusBars())
// hide(WindowInsets.Type.navigationBars())
systemBarsBehavior =
WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
}
// API 29以下の場合
} else {
window.decorView.systemUiVisibility = (
View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
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)
}
}
}
そして上記で記述した処理を呼び出したい画面で、下記のように継承することで呼び出すことができます。
// 上記で指定したBaseActivityを継承
class MainActivity : BaseActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
}
おわり
共通化したい処理をopen class内に記述し、呼び出したい画面のActivityで継承して呼び出します。
コード量を減らすことができ、確認しやすいコードになります。
Discussion