1、baseactivity和basefragment的写法
额外的知识点:
注意:抽象方法必须要在抽象类中
为什么要使用抽象类和抽象方法?
原因:当我们定义一个baseactivity的时候,布局文件layout和view控件等都是不确定的,我们需要在继承baseactivity的时候才会进行设置,所以这就要使用抽象类和抽象方法
baseactivity需要的功能
Toast,加载框,权限申请,跳转和带参数跳转,沉浸式状态栏(背景,文字):建议放到context的扩展函数中
因为扩展函数的出现,这些功能我们都可以放到扩展函数里,所以baseactivity我们只添加一个toolbar,想看上面功能的实现代码,可以到我的另外一篇博客
2、带toolbar的baseactivity的写法
当然,toolbar可以在需要的时候自己添加想要的,这里只是提供封装,在项目中还是可以用到的;下面我们来看看怎么实现
首先是BaseToolbarActivity的代码
package com.example.baseactivity
import android.os.Bundle
import android.view.LayoutInflater
import android.view.Menu
import android.view.MenuItem
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_base.*
abstract class BaseToolbarActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// 初始化基础布局
setContentView(R.layout.activity_base)
// 初始化设置Toolbar
setSupportActionBar(toolbar_base)
// 将继承了BaseActivity的布局文件解析到 container 中,这样 BaseActivity 就能显示 MainActivity 的布局文件了
LayoutInflater.from(this).inflate(setlayout(), frameLayout_base)
}
fun setToolbarTitle(title: String) {
toolbar_base.title = title
}
protected abstract fun setlayout(): Int
// 右上角的菜单
override fun onCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.menu_main, menu)
return true
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
// 有上角菜单点击事件
return when (item.itemId) {
R.id.action_settings -> true
else -> super.onOptionsItemSelected(item)
}
}
}
base_activity.xml的代码
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".BaseToolbarActivity">
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar_base"
android:layout_width="match_parent"
android:layout_height="40dp"
android:background="?attr/colorPrimary"
app:navigationIcon="@mipmap/toolbar_back"
app:title="Toolbar"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</com.google.android.material.appbar.AppBarLayout>
<FrameLayout
android:id="@+id/frameLayout_base"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
在mainactivity中使用:
package com.example.baseactivity
import android.os.Bundle
class MainToolbarActivity : BaseToolbarActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setToolbarTitle("主页")
}
//设置布局
override fun setlayout(): Int {
return R.layout.activity_main
}
}
demo地址:https://download.csdn.net/download/wy313622821/12799128