实现功能:
1.通用标题(多个activity使用同一个标题布局)
2.状态栏全透明
3.状态栏颜色黑白设置
BaseActivity 代码如下:
open class BaseActivity : AppCompatActivity() {
protected var mToolbar: Toolbar? = null
private var mTvTitle: AppCompatTextView? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setStatusBarFullTransparent()
}
override fun setContentView(layoutResID: Int) {
super.setContentView(layoutResID)
//这里在全透明状态栏的情况下 需要留出状态栏的空间,否则标题会在状态栏下面显示
setFitSystemWindow(true)
mToolbar = findViewById(R.id.toolbar)
mTvTitle = findViewById(R.id.tv_title)
}
/**
* 全透状态栏
*/
private fun setStatusBarFullTransparent() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { //21表示5.0
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
or View.SYSTEM_UI_FLAG_LAYOUT_STABLE)
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
window.statusBarColor = Color.TRANSPARENT
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { //19表示4.4
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
}
}
private fun setFitSystemWindow(fitSystemWindow: Boolean) {
val contentViewGroup = findViewById<ViewGroup>(android.R.id.content).getChildAt(0);
contentViewGroup.fitsSystemWindows = fitSystemWindow;
}
/**
* 界面设置状态栏字体颜色
*/
protected fun setStatusBarTextColor(isBlack: Boolean) {
if (isBlack) {
//设置状态栏黑色字体
window.decorView.systemUiVisibility =
window.decorView.systemUiVisibility or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
} else {
//恢复状态栏白色字体
window.decorView.systemUiVisibility =
window.decorView.systemUiVisibility or View.SYSTEM_UI_FLAG_VISIBLE;
}
}
//子类调用这个方法初始化返回图标和标题
protected fun initToolbar(backResId: Int, title: String) {
mToolbar?.let {
it.title = ""
it.setNavigationIcon(backResId)
}
mTvTitle?.let {
it.text = title
}
}
}
layout_head.xml布局文件如下
<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/purple_200"
app:navigationIcon="?attr/homeAsUpIndicator"
app:contentInsetStart="0dp">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="标题" />
</androidx.appcompat.widget.Toolbar>