这些是您拥有的选项。在项目中根据需要使用其中之一。
最好的办法
最好的方法是您在问题中已经说过,添加一个BaseActivity
并从中扩展您的所有活动。根据官方CoordinatorLayout
文档,
CoordinatorLayout
适用于两个主要用例:
- 作为顶级应用程序装饰或 chrome 布局
- 作为与一个或多个子视图进行特定交互的容器
所以CoordinatorLayout
主要是为了这个原因而创建的(尽管还有其他原因)。文档中提到的性能问题最少。
通过使用 FrameLayout
正如 Rainmaker 已经回答的那样,您可以使用 Activity 来引用CoordinatorLayout
布局文件夹中的布局,其中子文件夹将成为框架布局。
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
android:id="@+id/activity_root"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</android.support.design.widget.CoordinatorLayout>
然后,您将只使用一项活动setContentView(R.layout.root_coordinate_layout)
。然后,您将所有其他活动转换为片段并添加它们:
MyFragment myf = new MyFragment();
FragmentTransaction transaction = getFragmentManager()
.beginTransaction()
.add(R.id.your_layout, myf)
.commit();
程序化方式
这是做同样事情的另一种方式。但这有点复杂,需要做很多工作。
在您的所有活动中setContentView(R.id.your_layout)
,请使用以下命令:
LayoutInflater inflater = LayoutInflater.from(this);
ConstraintLayout yourLayout = (ConstraintLayout) inflater.inflate(R.layout.your_layout, null, false);
CoordinatorLayout layout = new CoordinatorLayout(this);
// Set its property as you wish ...
layout.addView(mainScreen);
setContentView(layout);