03 - Android——Activity活动(基本用法)

本文详细介绍了Android应用程序中的Activity组件,包括如何手动创建、加载布局、在Manifest.xml中注册、使用Toast提示和Menu菜单设计,以及销毁Activity的方法。

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

一、 活动是什么

  • Activity是一种可以包含用户界面的组件, 主要用于和用户进行交互;一个应用程序可以包含0个或者多个活动;

二、 活动的基本用法

1. 手动创建活动

  • 为了更好的理解创建一个活动(Activity)所要完成的工作, 在创建项目的时候, 选择Add no Activity, 这样系统就不会自动帮我们添加一个Activity(活动);

  • 创建完成后, 改成Project模式;

  • 在src目录下的包目录下新增一个空的Activity, 且不要勾选Generate Layout File和Launcher Activity;
    在这里插入图片描述
    在这里插入图片描述

  • 勾选Generate Layout File, 系统会自动给创建的Activity创建一个对应的布局文件, 并且添加进逻辑代码中;

  • 勾选Launcher Activity会自动将创建的Activity设置为当前项目的主活动;

  • 在创建出来的MainActivity.java文件中可以看到onCreate方法;

    • 在这里插入图片描述

2. 创建和加载布局

  • add no activity创建好项目之后, 可以看到res下没有layout目录(存放布局资源文件), 我们自己创建一个;
    • 在这里插入图片描述
  • 在res目录下, 右键Android Resource Directory, 新建layout资源文件在这里插入图片描述
  • 在这里插入图片描述
  • 接着在layout目录下, 新建layout resource file;
  • 在这里插入图片描述
  • 根元素就默认选择LinearLayout(线性布局)
  • 在这里插入图片描述
  • 创建好目录之后, 接下来就开始对布局文件进行分析

2.1 分析布局文件

  • 在这里插入图片描述
  • 布局文件有3中模式可以切换, Code, Split, Design;
  • Code : 即纯代码模式, 在这种模式下只能看到代码;
    • 在这里插入图片描述
  • Split模式:代码和视图混合;
    • 在这里插入图片描述
  • Design模式(可视化布局编辑器):只有视图, 这种模式比较方便的是可以直接拖动控件对布局进行设计;
    • 在这里插入图片描述
  1. 为布局新增一个Button控件, 代码如下:
    在这里插入图片描述
  • android:id, 代表给当前元素定义一个唯一的标识符; 若要新增一个没有的id名, 就用@+id, 后面跟自定义的id名;而如果要引用Android自带的或者已有的ID名, 就用@id;
  • android:layout_width指定当前元素的宽度, match_parent, 让当前元素和父元素一样宽;
  • android:layout_height指定当前元素的高度,wrap_content, 指包裹内容, 即元素高度和内容一样高;
  • android:text指元素中显示的文字;

3. 在活动中加载布局

在这里插入图片描述

  • setContentView(R.layout.first_layout);为当前活动加载一个布局;
  • 关键:项目中添加的任何资源都会在R文件中生成一个相应的资源id, 所以刚才创建的first_layout.xml布局的id已经添加到了R文件中,将这个id传入setContentView中即可为此活动添加一个布局;

4. 在AndroidManifest.xml文件中注册

在这里插入图片描述

  • exported属性值改为true;
  • 可以看到活动的注册声明是放在<application>标签内的, 这里是通过<activity>标签对活动进行注册的;【之前我们在包下手动创建activity的时候,选择的是new 一个empty activity, 所以这里Android Studio会帮我们写<activity>这个标签的内容, 如果我们用的是创建类的方式去添加一个活动Activity, 则一定要在清单文件上加上<activity android:name=".MainActivity"/>为活动进行注册, 否则运行会报错】。

4.1 分析清单文件

  • <activity>标签内, android:name来指定具体注册哪一个活动, 而.MainActivity其实就是com.example.firsttest的缩写,因为这里在最外层的<manifest>标签中, 已经通过package属性指定了程序的包名, 所以这里可以直接使用.MainActivity

  • 但这样写, 还只是注册了活动, 程序仍然不能运行;因为当程序运行起来的时候, 还不知道要首先启动哪一个活动, 所以这里还要为程序配置主活动

  • <activity>标签内部加入<intent-filter>标签:添加如下两句声明

    • 在这里插入图片描述
    • <action android:name="android.intent.action.MAIN"/>表明这个Activity这个项目的主活动;
    • <category android:name="android.intent.category.LAUNCHER"/>表明当程序运行时, 首先启动的就是这个活动;
    • android:label="First Activity", 指定活动中标题栏的内容, 标题栏是显示在Activity最顶部的;并且给主活动指定的label不仅会成为标题栏中的内容, 还会成为启动器(Launcher)中应用程序显示的名称;
  • 启动效果如下:在这里插入图片描述

  • 总结:没有将应用程序中的任何一个活动(Activity)设置成主活动, 这个程序仍然可以正常安装, 只是无法在启动器中看到或者打开这个程序【这种程序一般是作为第三方服务供其他应用在内部进行调用的, 比如支付宝的快捷支付服务】;但是应用程序中有活动, 却没有为它注册, 是一定会报错的;

5. 在活动中使用Toast

  • Toast是Android系统提供的一种非常好的提醒方式, 在程序中可以使用它将一些短小的信息通知给用户, 这些信息会在一段时间后自动消失, 并且不会占用任何屏幕空间;
  1. 首先需要定义一个弹出Toast的触发点, 需求: 点击按钮的时候弹出一个Toast, 添加代码如下:
    在这里插入图片描述
    在这里插入图片描述
  • 通过findViewById()方法获得在布局文件中定义的元素(控件),findViewById方法返回的是一个View对象, 这里需要将其向下转型成Button对象;
  • 得到按钮的实例后, 通过调用setOnClickListener()方法为按钮注册一个监听器, 这样点击按钮的时候就会执行监听器中的onClick()方法;
  • Toast通过静态方法makeText()创建出一个Toast对象, 接着调用show()方法将Toast显示出来;
  • makeText()方法的三个参数:第一个参数Context即Toast要求的上下文(环境), 而活动(Activity)本身就是一个Context对象, 所以这里直接传入MainActivity.this;第二个参数即Toast要显示的内容;第三个参数即Toast显示的时长, Android提供了两个内置常量, Toast.LENGTH_LONG(长时间)和Toast.LENGTH_SHORT(短时间);

6. 在活动中使用Menu

  • 手机和电脑相比, 其屏幕空间极其有限, 所以在手机界面设计中要学会充分的利用屏幕空间;
  • 如果你的Activity中有大量的菜单需要显示,该如何做?Android提供了一种方式, 使得所有菜单都能得到展示的同时, 还可以不占用任何空间;

6.1. 新建Menu文件

  • 在res(资源)目录下新建一个menu文件夹, 接着在这个目录下新建一个菜单文件, 过程如下:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

6.2. 创建菜单项

  • 输入文件名main之后, 在创建出来的main.xml文件中添加如下的代码:这里只创建了两个(item)菜单项;
    • <item> 标签是用来创建具体的某个菜单项, 然后通过android:id给这个菜单项指定唯一的标识符, 通过title给这个菜单项指定一个名称;
      在这里插入图片描述

6.3. 重写onCreateOptionsMenu()方法

  • 回到MainActivity活动中, 重写onCreateOptionsMenu()方法, 这里写重写方法可以使用ctrl+o组合快捷键:
    在这里插入图片描述
  • 代码如下:
  • 在这里插入图片描述
  • getMenuInflater()方法能够得到MenuInflater对象(MenuInflater是用来解析定义在menu 目录下的菜单布局文件的,类似于LayoutInflater 是用来解析定义在layout 下的布局文件。), 再调用其inflate()方法就可以为当前活动创建菜单了。
  • inflate()方法接收两个参数, 第一个参数用于指定通过哪一个资源文件来创建菜单, 这里传入R.menu.main菜单文件资源ID; 第二个参数指定菜单项将添加到哪一个Menu对象中, 这里直接使用onCreateOptionsMenu()方法中传入的menu参数, 然后返回true, 表示允许将创建的菜单显示出来, 如果返回了false, 创建的菜单将无法显示。

6.4. 定义菜单响应事件

  • 重写onOptionsItemSelected()方法, 代码如下:
    在这里插入图片描述
  • onOptionsItemSelected()方法中, 通过调用item.getItemId()来判断点击的是哪一个菜单项, 然后给每一个菜单项加入逻辑代码处理, 比如Toast消息提醒;
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 菜单里面的菜单项默认是不会显示出来的, 当点击菜单按钮(三个点)的时候才会弹出里面具体的内容, 因此它不会占用任何活动(Activity)的空间;

7. 销毁一个活动

  • 当你按下Back键, 就可以销毁当前的活动了, 那么用代码该如何实现?
  • 将刚才按钮监听器里面的逻辑代码修改一下, 当点击按钮, 当前活动销毁:(效果和Back键一样)
    在这里插入图片描述
    请添加图片描述
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郑师傅炒板栗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值