Blank activity and Empty activity in Android Studio

Android Studio 新建 Activity 的模板里,有一个 Blank Activity,还有一个 Empty Activity。这两个是不同的。

Blank Activity,会为你新建这样一个 Activity:含有导航栏,导航栏上有返回按钮,并设置了导航栏标题,右下角有一个浮动按钮。

可以发现工程中新建了一个 NewActivity.java 的类,同时新建了两个布局文件,一个是 activity_new.xml,另一个是 content_new.xml。activity_new.xml 中是一个 CoordinatorLayout,并且 include 了 content_new.xml。这个 Activity 显示的内容实际在 content_new.xml 中,它是一个 RelativeLayout。

Empty Activity,会为你新建这样一个 Activity:含有导航栏,没有返回按钮,导航栏标题没有设置,其他都是空白。

工程中新建了 NewActivity.java 和 activity_new.xml,里面是一个 RelativeLayout。

要想实现 Blank Activity 的效果,并希望不要有多余的东西,在一个 xml 布局中实现,可以按照以下框架(下面以 EditPasswordActivity 为例):

activity_edit_password.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.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"
android:fitsSystemWindows="true"
tools:context="org.stoneark.doorsbylin.EditPasswordActivity">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="org.stoneark.doorsbylin.EditPasswordActivity" >
</RelativeLayout>
</android.support.design.widget.CoordinatorLayout>

中间的这个 RelativeLayout,就是这个 Activity 实际承载的内容,替换成自己的布局即可。但请注意!!一定要为这个布局添加这个属性:

1
app:layout_behavior="@string/appbar_scrolling_view_behavior"

这样的话,这个布局将会在顶部导航栏的下方开始显示。如果不加这个属性,它将从屏幕顶端开始显示,会跟顶部的导航栏重叠在一起。在有的手机上会被导航栏遮盖,有的手机上会显示在导航栏上方。

附注:@string/appbar_scrolling_view_behavior 是 Android SDK 里定义的一个字符串,直接使用即可,内容为:
android.support.design.widget.AppBarLayout$ScrollingViewBehavior

然后在 Activity 的 onCreate() 里添加以下代码:

1
2
3
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

并且在 AndroidManifest.xml 里给这个 Activity 添加属性:

AndroidManifest.xml
1
2
3
4
5
6
7
8
<activity
android:name=“.EditPasswordActivity"
android:label="@string/title_activity_edit_password"
android:theme="@style/AppTheme.NoActionBar">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="org.stoneark.doorsbylin.UserCenterActivity" />
</activity>