Android 7.19-1 Activity介绍

本文详细介绍了如何手动创建一个Android Activity,包括不依赖默认模板、创建布局、在AndroidManifest.xml中注册Activity、使用Toast和Menu,以及如何销毁Activity。通过实例展示了Activity的完整生命周期管理过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. Activity介绍

闲话:什么是Activity

Activity可以理解为用户界面,用来与用户进行交互,其中包含了用户界面的组件;一个应用程序可以有零个或多个Activity。

1.1 手动创建Activity

新建一个项目,选择Add No Activity,不生成MainActivity,因为我们要自己创建
在这里插入图片描述
项目名称随意,我跟着书取ActivityTest
在这里插入图片描述
项目创建好后,观察项目结构,并没有像之前创建项目时选择Empty Activity一样生成一个MainActivity文件
在这里插入图片描述
右键此包,New一个空Activity
起名为FirstActivity,并把Generate Layout File(生成布局文件)和Launcher Activity(作为启动Activity)去除勾选,因为我们要自己弄
在这里插入图片描述
在这里插入图片描述
创建完成,并且Android Studio(AS)已经帮我们自动生成了重写onCreate()方法的代码,当然,以后可以根据自己的需要修改里面的逻辑的,毕竟代码是死的人是活的。
在这里插入图片描述

1.2 创建和加载布局

Android程序有一个前提就是逻辑和视图分离,类似于前后端的关系,最好一个Activity对应一个布局
在src.main/res目录下New一个layout目录,用来存放布局,然后再此目录下New一个Layout resource file,命名为first_layout,选择线性布局即可,创建完成如图
在这里插入图片描述
点击Text进行代码级的编辑,并添加一个Button
在这里插入图片描述
前面说过,Activity要对应布局,那么程序不知道啊,我们需要告诉程序first_laytou这个布局是对应FirstActivity的,所以回到FirstActivity中,添加代码如图
在这里插入图片描述
在项目中添加任何资源都会在R文件中生成一个相应的资源id,因此我们创建first_layout.xml的时候已经将id添加到R文件中了,所以直接调用R.layout.first_layout即可获取该布局的id传给setContentView()方法

1.3 在AndroidManifest.xml中注册

所有的Activity都需要在A你的肉i的Manifest.xml中注册才行,但是在New好一个Activity时,AS已经被帮我们注册好了,打开AndroidManifest.xml文件,Activity的注册放到了标签内部
在这里插入图片描述
注册好了Activity,现在程序还并不能运行,因为没有配置主Activity,程序没有一个入口,所以我们还需要对主Activity进行配置,也是通过标签实现
在这里插入图片描述
然后运行试试,选择设备,点击运行
具体操作
在这里插入图片描述

1.4 Toast的使用

Toast是一种非常好的提醒方式,使用它可以将一些短小的信息进行通知,一段时间后自动消失,并且不会占用任何屏幕空间
只用Toast首先需要定义一个弹出Toast的触发点,我们试试用按钮的点击事件作为触发点。在onCreate()中写入代码:

        val button_1: Button = findViewById(R.id.button_1)
        button_1.setOnClickListener {
            Toast.makeText(this, "You clicked button_1", Toast.LENGTH_SHORT).show()
        }

在这里插入图片描述
其中,通过R文件中的button_1这个id获取的到按钮的实例,由于findViewById()方法返回的是一个继承自View的泛型对象,所以Kotlin无法知道他是什么类型,需要我们显示的声明为Button类型,通过调用setOnClickListener()方法注册一个监听器;然后就可以书写Toast的逻辑了,通过调用Toast的静态方法makeText()创建对象,并调用show()方法进行显示,其中makeText()方法需要传入三个参数:

  1. Context,依旧是Toast要求的上下文,由于Activity本身就是一个Context对象,因此这里直接传入this。
  2. 文本的内容
  3. 显示的时长,有两个常量可以选择Toast.LENGTH_SHORTToast.LENGTH_LONG
    在这里插入图片描述
    重点
    用Kotlin编写的Android项目再app/bulid.gradle文件的头部默认引入了kotlin-android-extensions插件,它会根据布局文件中定义的控件id自动生成一个具有相同名称的变量,我们可以直接使用这个变量,而不用再调用findViewById()方法,如图
    在这里插入图片描述

1.5 Menu的使用

在res目录下新建menu文件夹,在menu文件夹下New一个Menu resource file,取名为main
在这里插入图片描述
然后用标签创建两个菜单项

    <item
        android:id="@+id/add_item"
        android:title="Add"/>
    <item
        android:id="@+id/remove_item"
        android:title="Remove"/>

在这里插入图片描述
回到FirstActivity中,按Ctrl+O,重写onCreateOptionsMenu()方法
在这里插入图片描述
然后书写代码

    override fun onCreateOptionsMenu(menu: Menu?): Boolean {
        menuInflater.inflate(R.menu.main, menu)
        return true
    }

在这里插入图片描述
这里需要注意,在Kotlin中,我们调用一个类中的属性时,可以直接调用,而不是通过get、set方法,Kotlin会自动帮助我们替换;所以这里直接调用了menuInflater,实际上是在调用父类的getMenuInflater()方法,Ctrl+左键menuInflater如下图,可以看到确实是到了父类的getMenuInflater()方法。
在这里插入图片描述
从图中可以看到,getMenuInflater()返回的是一个MenuInflater对象,所以可以调用其inflate()方法给当前Activity创建菜单;inflate()接收两个参数:

  1. 指定我们通过哪一个资源文件来创建菜单,这里选择我们写好的res/menu/main文件,即R.menu.main
  2. 指定我们的菜单项将添加到哪一个Menu对象当中,这里直接使用onCreateOptionsMenu()方法中传入的menu参数

此方法返回值为true,说明菜单允许被显示,false表示不允许被显示。
运行,右上角出现了三个点,点开为菜单
在这里插入图片描述
在这里插入图片描述
菜单的显示做到了,那菜单还要有一定的功能才行,我们给菜单加上响应事件
在FirstActivity中重写onOptionsItemSelected()方法,这里用一个when语句,传入item.itemId,代码看不懂就看看上面标重点的内容和when的语法。

    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        when(item.itemId){
            R.id.add_item -> Toast.makeText(this, "You clicked Add",
                Toast.LENGTH_SHORT).show()
            R.id.remove_item -> Toast.makeText(this, "You clicked Remove",
                Toast.LENGTH_SHORT).show()
        }
        return true
    }

在这里插入图片描述
运行,点Add就出现Add的Toast,点Remove就是出现Remove的Toast

1.6 销毁一个Activity

Activity类提供了finish()方法,调用此方法可以销毁当前Activity,比如在button的响应事件中加入finish(),那点击按钮就会关闭当前Activity,效果和按Back键是一样的

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值