📱

Android : Activityを継承して共通処理をまとめる

2022/10/03に公開

はじめに

業務用のAndroidアプリをつくる際に、ツールバーやナビゲーションバーを表示しない(フルスクリーン化)設定をActivityごとに記述していました。どの画面にも共通化できる処理なので、何か方法はないかと探していました。その共通化のやり方について書き残します。

実装方法

フルスクリーン化の処理

ナビゲーションバーやステータスバーの非表示にしてフルスクリーン化する処理は下記で解説しています。
https://zenn.dev/takudooon/articles/b9e639b9596f5f

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