Android学习笔记(三):添加新activity、Button

        之前提到过,活动就类似于界面,如我们可以从一个微信主界面跳转到聊天界面,实现方法就是从一个活动跳转到另一个活动。现在我们就来增加一个新活动,并通过一个按钮实现跳转。

一、自动创建activity

        Android studio 可以自动创建一个activity,在app/src/main/java/com.example.myapplication/ 目录下右键->New->Activity->Empty Views Activity 新建一个empty activity,如下图所示

从上图可以看到,其中需要设置activity name(活动名)、Layout name(布局名)、 package name(包名),以及编译语言java。默认设置,finish

可以看到,自动生成了两个文件,java文件和xml布局文件,你可以点开文件看看内容,并按照之前学的知识,尝试修改内容试试,比如在布局中增添一个TextView。

        此外,打开AndroidManifest.xml文件,你会发现这个文件内容也被修改了,新增了如下代码

<activity
    android:name=".MainActivity2"
    android:exported="false" />

我之前提到过,AndroidManifest.xml文件类似于一个注册表,所有的活动都需要在这个文件中注册才可以使用。其中,name 指指activity类,exported先不管,可以删除。因此,我们知道,新建一个activity,我们需要新建一个activity类,新增一个xml布局文件,并修改ActivityManifest.xml文件。你不妨手动创建一个empty activity ,进一步加深理解。

        既然增添了一个新活动,那我们怎么使用它呢。我们可以通过一个按钮,从一个活动跳转到另一个活动。

二、添加一个Button按钮

        我们从activity_main界面(MainActivity)利用按钮跳转到activity_main2界面(MainActivity2),那就需要在activity_main.xml文件中增添一个按钮布局,代码如下所示

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center">

    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello"/>

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/Button"/>

</LinearLayout>

<Button  ... />  语法就是添加一个按钮布局,其中的语法,通过前面的学习我想你们应该都能够轻松理解了吧。在strings.xml文件中,我设置 Button = go to activity2 。你可以通过在右上角点击Split中看到布局,如下图所示

 三、实现按钮逻辑,跳转界面

        打开MainActivity.java文件,修改代码如下

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView textView = findViewById(R.id.text);
        textView.setText("Hello Android!");

        Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent();
                intent.setClass(MainActivity.this, MainActivity2.class);
                startActivity(intent);
            }
        });
    }
}

        首先,创建一个Button类,并通过 findViewById(R.id.button) 引用按钮布局。然后给按钮设置监听事件,其中new View.OnClickListener() {} 为一个匿名类,匿名类的作用就是当这个类只在一个地方使用,其他地方不再使用时,就可以使用匿名类,就不用额外写一个类出来。在匿名类中重写onClick 函数。

        Intent 类,现在可以简单理解为一个传递信息的对象。通过intent设置上下文,在setClass函数中传入MainActivity.this,MainActivity2.class。可以简单理解为从MainActivity活动跳转到MainActivity2活动中去。最后调用startActivity函数,开启活动。这样你就可以通过点击按钮从activity_main界面跳转到activity_main2界面了。记得要先发布到手机哟。

四、APP主界面

        你可能会好奇,我创建了多个界面,那系统如何分析打开APP显示的第一个活动是哪一个呢。那就打开ActivityManifest.xml文件吧,它是注册活动的文件,它肯定知道哪个是第一个活动。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <application
        android:allowBackup="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.MyApplication"
        tools:targetApi="31">
        <activity
            android:name=".MainActivity2" />
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

        细心的朋友在创建新activity的时候可能就注意到,两个activity的内容不一样,其中MainActivity中增添了intent-filter模块,它里面的内容就是区分哪个活动是第一个活动的关键。你可以尝试将这里面的内容放到MainActivity2中,并通过手机打开APP,看看是不是第一个界面为activity_main2中的布局。

五、总结

        通过这篇文章的学习,我们学会了新建一个活动activity,以及一个按钮button,并通过按钮从一个活动跳转到另一个活动。最后分析了APP是如何判断第一个活动的。