【活动 == 页面】。Android 最初是用 Java 写的,所以Android 里的页面和前端里的页面稍有不同。

    前端页面写在 html 里,Android 页面写在 xml 里,活动里写页面的逻辑。活动本身是一个非常非常普通的 Java 类,因为继承 AppCompatActivity 类,拥有父类的方法和属性,也就从普通 Java 类升级为了活动类。

    1. public class MainActivity extends AppCompatActivity {
    2. @Override
    3. private void onCreate (Bundle savedInstanceState) {
    4. super.onCreate(savedInstanceState);
    5. setContentView(R.layout.activity_main);
    6. }
    7. }

    上面是个活动类,继承父类,实现父类的 onCreate 方法,在该方法中,调用 setContentView 方法加载对应的 xml 页面文件。

    可以看到直接调用了 setContentView() 方法,对于 Java 小白来说这一点有点难以理解,不是说 Java 是面向对象的语言吗?除了静态方法用【类名.方法名】调用之外,其它方法都是用【对象.方法名】调用的啊。这里直接调用什么鬼??

    1. public class Test {
    2. public int add (int a, int b) {
    3. return a + b;
    4. }
    5. public void start (String[] args) {
    6. int sum = add(1, 2);
    7. }
    8. }

    上面代码解释了这个问题,在类的内部一个方法调用另一个方法可以直接调用。

    MainActivity 类继承了 AppCompatActivity 类,自然拥有它所有的方法(protected 修饰的方法不能被继承),进入 AppCompatActivity 类可以找到 setContentView 方法,在 onCreate 方法调用类内部的方法当然可以直接调用。

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    3. package="top.dkvirus.novel.pages">
    4. <application
    5. android:supportsRtl="true"
    6. android:label="Hello World"
    7. android:theme="@style/AppTheme">
    8. <activity
    9. android:name=".MainActivity">
    10. <intent-filter>
    11. <action android:name="android.intent.action.MAIN" />
    12. <category android:name="android.intent.category.LAUNCHER" />
    13. </intent-filter>
    14. </activity>
    15. <activity android:name=".OtherActivity" />
    16. </application>
    17. </manifest>

    上面定义了一个活动类,到这一步页面还不会显示,需要在 main/AndroidManifest.xml 文件中注册这个活动。可以认为 AndroidManifest.xml 文件是 Android 应用的入口了吧。其中 intent-filter 标签制定了程序第一个加载的活动类,也就是第一个页面。

    1. <activity
    2. android:name=".SearchActivity"
    3. android:label="搜索" />

    其中,如果要给页面设置标题栏文字,那就在 AndroidManifest.xml 中给对应的 activity 添加 label 属性。