问题
假设有多个Activity需要标题栏,且标题栏的样式都是一样的,那么怎么操作才能提高工作效率?
方案
可以定义一个公共的标题栏布局,然后每个Activity布局引用这个公共布局即可。
公共标题栏布局
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:background="#020" android:layout_width="match_parent" android:layout_height="wrap_content"> <Button android:id="@+id/titleBack" android:text="Back" android:textColor="#fff" android:layout_margin="5dp" android:layout_gravity="center" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <TextView android:id="@+id/titleText" android:text="Title Text" android:textColor="#fff" android:textSize="24sp" android:layout_gravity="center" android:gravity="center" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content"/> <Button android:id="@+id/titleEdit" android:text="Edit" android:textColor="#fff" android:layout_gravity="center" android:layout_margin="5dp" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout>
Activity中引入标题栏布局
<?xml version="1.0" encoding="utf-8"?> <LinearLayout 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=".MainActivity"> <include layout="@layout/title"/> </LinearLayout>
可以看到使用<include layout="layout path">就可以引入公共XML资源,layout写入资源路径。
因为每个Activity都有自己默认的标题栏布局,所以还需要禁用Activity默认的标题栏布局
class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val bind = ActivityMainBinding.inflate(layoutInflater) setContentView(bind.root) supportActionBar?.hide() } }
代码:supportActionBar?.hide() 就是禁用默认的标题栏布局,因为ActionBar可能为空,所以这里使用了?.操作符,使用java代码的时候也别忘记判断空逻辑。