【活动 == 页面】。Android 最初是用 Java 写的,所以Android 里的页面和前端里的页面稍有不同。
前端页面写在 html 里,Android 页面写在 xml 里,活动里写页面的逻辑。活动本身是一个非常非常普通的 Java 类,因为继承 AppCompatActivity 类,拥有父类的方法和属性,也就从普通 Java 类升级为了活动类。
public class MainActivity extends AppCompatActivity {@Overrideprivate 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"><applicationandroid:supportsRtl="true"android:label="Hello World"android:theme="@style/AppTheme"><activityandroid: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 标签制定了程序第一个加载的活动类,也就是第一个页面。
<activityandroid:name=".SearchActivity"android:label="搜索" />
其中,如果要给页面设置标题栏文字,那就在 AndroidManifest.xml 中给对应的 activity 添加 label 属性。
