Android BaseActivity抽象举例

核心内容:

log常用标记TAG赋值,

状态栏设置,

逻辑区分,

onNewIntent重写,

跳转方法简化.

状态栏原生方案(可选)

/**
 *Author:XingHai.Zhao
 *Purpose: All Activity Father
 */
abstract class BaseActivity : AppCompatActivity() {
    var TAG: String = ""
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        supportRequestWindowFeature(Window.FEATURE_NO_TITLE)
        setContentView(mContentView)
        ImmersionBar.with(this).statusBarDarkFont(true).init()
        TAG = this.localClassName
        initView()
        initData()
        initListener()
    }

    abstract val mContentView: Int
    abstract fun initView()
    abstract fun initData()
    abstract fun initListener()

    override fun onNewIntent(intent: Intent?) {
        setIntent(intent)
        super.onNewIntent(intent)
    }

    fun goActivity(act: Class<*>?) {
        startActivity(Intent(this, act));
    }

    fun goActivity(act: Class<*>?, key: String, value: String) {
        startActivity(Intent(this, act).putExtra(key, value));
    }

    //不想用ImmersionBar的替代方案
    open fun setStatusBar(colorId: Int) { //  目前首页专用
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            setTranslucentStatus(true)
            val mTintManager = SystemBarTintManager(this)
            mTintManager.isStatusBarTintEnabled = true
            mTintManager.setStatusBarTintResource(colorId) //通知栏所需颜色
            //window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);//透明状态栏
            //window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        }
        //设置6.0以上状态栏字体颜色为白色
        window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_VISIBLE
        // 部分机型的statusbar会有半透明的黑色背景
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
        }
        //KITKAT也能满足,只是SYSTEM_UI_FLAG_LIGHT_STATUS_BAR(状态栏字体颜色反转)只有在6.0才有效
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            // 状态栏字体设置为深色,SYSTEM_UI_FLAG_LIGHT_STATUS_BAR 为SDK23增加
            window.decorView.systemUiVisibility =
                    View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or
                            View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
            window.statusBarColor = Color.TRANSPARENT // SDK21
        }
    }

    @TargetApi(19)
    open fun setTranslucentStatus(on: Boolean) {
        val win = window
        val winParams = win.attributes
        val bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
        if (on) {
            winParams.flags = winParams.flags or bits
        } else {
            winParams.flags = winParams.flags and bits.inv()
        }
        win.attributes = winParams
    }
    
}

 //状态栏自定义依赖:

implementation 'com.gyf.immersionbar:immersionbar:3.0.0'

子Activity继承举例:

class LoginActivity : BaseActivity() {

    override val mContentView: Int = R.layout.activity_login

    override fun initView() {}

    override fun initData() {}

    override fun setListener() {}

}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值