1. Activity的基本概念,生命周期,Intent的数据传递方法
Activity是应用程序的一个组件,Activity是表示一个视图层次结构的窗口,Activity通常填充屏幕,可以嵌入其他活动,也可以显示为浮动窗口,Activity是一个Java类,通常用一个文件表示Activity.
Activity的功能:
-
表示一个活动
- 处理用户的按钮单击,文本输入等用户交互
- 启动自身或其他应用程序的活动
- 具备创建,启动,运行,暂停,恢复,停止和销毁等生命周期
与App的关系
- 应用程序有多个活动松散地捆绑在一起组成
- 用户看到的第一个活动称为"主活动"
- Activity需要在AndroidManifest配置文件中组织父子关系,帮助导航
与Layout的关系
- 一个Activity通常有一个UI布局文件
- 创建Activity时设置布局文件
Activity的生命周期
Intent的数据传递方法
Intent被称为"意图",是对要执行操作的描述,Intent是用于从另一个应用组件请求一个动作的对象
Intent的功能
- 启动Activity
- 启动Service
- 发送Broadcast
所有的Activity实例都由Android运行时进行管理,由"Intent"开始,将信息传递给Android系统运行Activity
使用Intent发送数据的两种方式
- data:使用setData()方法传递Uri类型的数据,如
- intent.setData(Uri.parse("http://www.baidu.com"));
- intent.setData(Uri.fromFile(new File("/sdcard/sample.jpg")));
- extras:使用Key-Value对传递数据
- intent.putExtra(String name,int value);
- intent.putExtra(String name,String[] value);
- intent.putExtras(Bundle bundle);
使用Intent接收数据的两种方式
- data:使用getData()方法接收Uri类型的数据,如
- Uri locationUri=intent.getData();
- extras:接收Key-Value对数据
- int level=intent.getIntExtra("level",0);
- Bundle bundle=intent.getExtras();
2. 基本控件和常用布局的基本概念、必填参数
MVC模型
- Android应用遵循MVC模型
- Controller:即Activity/Fragment
- View:即用户界面元素
- Model:自行编写代码
- View及其子类
- View:在界面上显示具体的内容,响应各种事件等
- ViewGroup:不会显示具体的内容,而是其他组件的集合,或是将单一的View组件合成一个新的组件,主要起到布局作用。
- Activity通过布局管理添加各种View组件,调用Activity的setContentView方法可以将指定的视图对象呈现出来。
View
- 在手机上所看到的每个用户界面元素都是View
- View子类是用户界面的基本构成模块如:
- 显示文本的TextView类、编辑文本的EditText类;
- 显示Button类、菜单Menu以及其它控件;
- 可滚动的RecyclerView类、ScrollView类;
- 显示图像的ImageView类;
- ViewGroups视图包括LinearLayout、RelativeLayout等布局
ViewGroup
- ViewGroup提供了对其子View的管理功能,包括布局、动画等。子组件可以是View、也可以是ViewGroup。
layout的含义
- layout布局是特定类型的ViewGroup
- layout布局可以包含子View
- layout布局可以在行、列、网格或绝对值设置子View的坐标
Android基本布局
- LinerLayout:线性布局,子View水平或垂直方向进行排列
- FrameLayout:帧布局,子View以左上角为起点堆在一起
- RelativeLayout:相对布局,子View之间的相对定位进行排列
- GridLayout:网格 布局,子View以行、列方式进行排列
- ConstraintLayout:约束布局,约束方式连接子View布局
布局概述
- 布局是一种可用于放置很多控件的容器
- 多层布局的嵌套:布局内部除了可以放置控件外,还可以放置布局
- 基本布局:LinearLayout、FrameLayout、GridLayout、RelativeLayout
- Material Design新增布局:ConstratintLayout、TextInputLayout、TabLayout、DrawerLayout、CorrdinatorLayout
布局的通用属性
- Android系统中常用布局直接或间接继承自ViewGroup,因此它们也支持在ViewGroup中定义的属性,这些属性可以看作是布局的通用属性。
Android基本控件
- TextView:文本框控件
- EditText:编辑框控件
- Button:按钮控件
- ImageView:图片控件
- CheckBox:选择框控件
- RadioButton:单选框控件
- Snackbar:消息框控件
- TextInputLayout:文本输入布局
- ViewBinding:视图绑定
3. 菜单的类型,如何创建
菜单概述
- 选项菜单:OptionsMenu,Activity的主菜单项集合,放置对应用产生全局影响的操作,如:搜索、设置等
- 浮动模式的上下文菜单:ContentMenu,用户长按某个元素出现的浮动菜单,提供的操作影响所选内容
- 上下文操作模式的上下文菜单
- 弹出菜单:PopupMenu,以垂直列表形式显示一系列菜单项,并且该列表会固定到调用该菜单的视图中,它适用于提供与特定内容相关的操作,如:Activity的内容区域相关的扩展操作
App Bar
- 屏幕顶部的标题栏称为ActionBar或Toolbar,包括
- 导航图标:用户打开导航抽屉
- 当前Activity的标签名称
- 选项菜单项的图标
- 溢出按钮:其他的选项菜单项目
选项菜单
- Android3.0及更高版本,选项菜单出现在Toolbar中,取消了物理按钮的底部弹出菜单
- 重要菜单项的图标
- 动作溢出按钮
- 右侧显示的其余菜单项
- 实现步骤:
- 创建菜单布局XML文件
- 在Activity类加载菜单
- 为菜单项注册点击事件
- 编写处理菜单项的处理方法
上下文菜单
- 长按一个支持上下文菜单的视图,菜单显示有两种模式
- 浮动模式:在点击位置显示菜单列表(类似于对话框)
- 上下文模式:在屏幕顶部栏显示上下文菜单项图标
创建上下文菜单
- 创建菜单的XML资源文件
- 调用registerForContextMenu(),注册与上下文菜单关联的View,并将其传递给View
- 在Activity类中实现onCreateContextMenu()方法,加载菜单资源
- 实现onContextItemSelected()处理菜单项的点击事件
- 创建每个菜单项处理的方法
- 上下文操作模式的创建步骤
- 创建XML菜单资源文件
- 控件调用setOnLongClickListener()设置长按事件监听器,其中调用startActionMode()方法启动上下文操作模式
- 实现ActionMode.Callback接口,重写它的回调方法onCreateActionMode()、onActionItemClicked()等回调方法
- 创建处理菜单项事件的方法
4. 常用资源的类型及定义
什么是资源
- Android资源:指代码需要的附加文件和静态内容,包括布局、字符串、颜色、数组、动画、位图、图标、音视频和其他应用程序使用的组件等。
- res目录:用于存放资源编写好的资源通过AAPT(Android AssetPackagingTool)工具自动生成gen目录下的R.java资源索引文件,然后可以在Java代码和XML资源文件中利用索引进行引用。
- 需要注意的是:该目录下的任何资源出现问题,都会影响R.java文件的生成,导致所有的资源都无法引用。
- 资源文件的命名规则:由"a-z0-9_."字符组成,不能包含大写字母及中文字符
常用资源及目录
样式和主题
- 样式是一个属性集合,如:设置字体颜色、字号、颜色等属性用于单个View的样式设置样式可以用于单个View、Activity或Application
- 主题是用于整个App、Activity或View的样式集合
- 主题还可以用于状态栏、窗口背景等非视图元素
- 样式和主题在res/values/styles.xml文件进行声明,使用name属性值进行引用,而非XML文件名称
5. Fragment的基本概念,创建及与Activity的交互
Fragment简介
Fragment的中文含义是“片段”或“碎片”,这表明Fragment是嵌在Activity中使用的UI片段,一个Activity中可以组合多个Fragment,多个Activity可重复使用某个Fragment。Fragment可视为Activity的模块化组成部分,它具有自己的生命周期,能处理用户事件,并能在Activity运行时动态添加或溢出。
综上所述,Fragment具备以下优势:
- 模块化Modularity:无需将所有代码写在Activity中,而是分别写在各自的Fragment中;
- 重用性Reuasbility:多个Activity可以重用一个Fragment;
- 适配性Adaptability:根据硬件的屏幕尺寸、屏幕方向,实现不同的布局。
使用Fragment
创建Fragment的方法与Activity类似,自定义Fragment类继承自androidx.fragment.app.Fragment,示例代码如下:
public class TitleFragment extends Fragment{
@Overrid
public View onCreateView(LayoutInflater inflater,ViewGroup container,
Bundle savedInstanceState){
View view=inflater.inflate(R.layout.fragment_title,container,false);
return view;
}
}
Activity添加Fragment
创建的Fragment必须添加到Activity中才能使用。Activity添加Fragment有静态和动态两种方式,下面一一讲解。
1.静态加载
在Activity的布局文件中使用<fragment>标签静态添加Fragment,必须指定android:name属性,其属性值为Fragment的全限定名;toos:layout属性用于设置Fragment的布局,属性值为layout目录的fragment的名称;app:layout_constrainVertical_weight属性是ConstrainLayout布局设置纵向权重的属性。
2.动态添加Fragment
实际项目使用静态加载的场景很少,绝大多数是根据具体情况在程序运行时动态添加Fragment,这样做的好处是可定制Fragment.需要注意的是,若需要在运行时添加或替换Fragment时,则Activity布局必须有一个装在Fragment的布局容器.
然后,在MainActivity类使用FragmentManager对象管理Fragment的添加,移除,替换以及执行其它事物,最终调用commit()方法提交.