【活动 == 页面】。Android 最初是用 Java 写的,所以Android 里的页面和前端里的页面稍有不同。
前端页面写在 html 里,Android 页面写在 xml 里,活动里写页面的逻辑。活动本身是一个非常非常普通的 Java 类,因为继承 AppCompatActivity 类,拥有父类的方法和属性,也就从普通 Java 类升级为了活动类。
public class MainActivity extends AppCompatActivity {
@Override
private void onCreate (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
上面是个活动类,继承父类,实现父类的 onCreate 方法,在该方法中,调用 setContentView 方法加载对应的 xml 页面文件。
可以看到直接调用了 setContentView() 方法,对于 Java 小白来说这一点有点难以理解,不是说 Java 是面向对象的语言吗?除了静态方法用【类名.方法名】调用之外,其它方法都是用【对象.方法名】调用的啊。这里直接调用什么鬼??
public class Test {
public int add (int a, int b) {
return a + b;
}
public void start (String[] args) {
int sum = add(1, 2);
}
}
上面代码解释了这个问题,在类的内部一个方法调用另一个方法可以直接调用。
MainActivity 类继承了 AppCompatActivity 类,自然拥有它所有的方法(protected 修饰的方法不能被继承),进入 AppCompatActivity 类可以找到 setContentView 方法,在 onCreate 方法调用类内部的方法当然可以直接调用。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="top.dkvirus.novel.pages">
<application
android:supportsRtl="true"
android:label="Hello World"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".OtherActivity" />
</application>
</manifest>
上面定义了一个活动类,到这一步页面还不会显示,需要在 main/AndroidManifest.xml 文件中注册这个活动。可以认为 AndroidManifest.xml 文件是 Android 应用的入口了吧。其中 intent-filter 标签制定了程序第一个加载的活动类,也就是第一个页面。
<activity
android:name=".SearchActivity"
android:label="搜索" />
其中,如果要给页面设置标题栏文字,那就在 AndroidManifest.xml 中给对应的 activity 添加 label 属性。