B站教程:https://www.bilibili.com/video/BV1bu41197RE
笔记地址:http://note.youdao.com/ynoteshare/index.html?id=ac3916fa3cc3b035e9433d9564612f00&type=note
前言
1、入门准备
1.1 学习这门课程需要准备的东西->java基础,为什么选择java语言而不是kotlin?
1.2 Android对新手的友好程度->不友好 上学时我们老师的建议 和我一路走来的经历 以及现在培训班培训Android的数量
1.3 后面的课程安排->由浅到深
1.4 课程目标->以最接地气最容易理解的方式讲解课程的知识点,在讲解完知识点之后尽量每一个知识点都有实战环节帮助大家加深记忆和理解
1.5 Android开发者官网 https://developer.android.google.cn
2、Android系统的整体架构和Android历史版本
2.1 Android是一种操作系统还是一个编程语言?
2.2 Android整体架构的认知 Android1->Android12 早期的Android版本系统漏洞较多 容易被搞一些黑科技 加上一些无良开发者或者公司
导致大家有一种印象Android手机很垃圾很卡。随着谷歌不断的对Android系统的更新,越来越完善,体验越来越好
百度百科参考资料:https://baike.baidu.com/item/Android%E5%8E%86%E5%8F%B2%E7%89%88%E6%9C%AC/1578450?fr=aladdin
第一章
1 Android应用的整体架构
百度百科资料参考:https://baike.baidu.com/item/Android%E7%B3%BB%E7%BB%9F%E6%9E%84%E6%9E%B6/15591610?fr=aladdin
我们日常开发的就是在应用层
2 搭建Android开发环境(Android Studio),搭建开发环境是我们的基础,如果开发环境不能搭建成功,那么也就不能继续往下学习了
Android Studio下载地址:https://developer.android.google.cn/studio?hl=zh_cn
3 创建第一个应用并且运行起来
官网文字教程->https://developer.android.google.cn/training/basics/firstapp/creating-project?hl=zh_cn
4 详解工程目录结构
主要讲解一些常用的目录,对于一些不常用的目录,尽管讲了大家也不常用,过几天就又忘记了。不要死记硬背这些东西
开发者文档:https://developer.android.google.cn/guide/topics/resources/providing-resources?hl=zh_cn
清单文件AndroidManifest.xml 开发者文档https://developer.android.google.cn/guide/topics/manifest/manifest-intro?hl=zh_cn
5 Android日志输出系统Log的使用
5.1 简单使用
5.2 log等级
5.3 log控制台的讲解
5.4 log过滤方式
5.5 自定义过滤方式
第二章 常用Ui的详解
1 View和ViewGroup的区别和详解
1.1 View是所有空间的子类,用于创建交互式的组件
从另外一个层面上讲,View不能包含其它控件,不是一个容器
1.2 ViewGroup继承自View,是一个容器,其中可以包含其它View
1.3 layout_width和width的区别
layout_width 只有三种选择一个是wrap_content二是match_parent,三是具体值。使用这个属性的前提条件是这个View必须有父View,否则layout_开头的相关属性不生效。
layout_width就是父布局允许view所占的宽度,而width是view的自身宽度。在layout_width和width都设置为具体数值的时候,width其实就无效了,这也不难理解,父布局已经给你分配了具体的空间,
不论view怎么设置width,view的宽度也只能是layout_width。
width这个是用来view的具体宽度的,以像素为单位。
2 常见的View
2.1 TextView
用途:显示文本的控件
参考文档:https://developer.android.google.cn/reference/android/widget/TextView
常用属性:
1、id->为控件设置一个ID,方便根据id,我们可以在Java代码中通过findViewById()的方法获取到该对象,然后进行相关属性的设置。又或者XML文件进行摆放,参考组件用的也是id!
2、gravity->设置控件的方向
3、text->设置显示的文本内容,比较规范的写法是把字符串放在string.xml文件里面,然后去引用资源
4、textColor->设置文本颜色
5、textStyle->设置字体风格 默认是没有效果,有三个选项可以选 bold(粗体) italic(斜体)
6、background->控件的背景,可以设置颜色,图片,其它资源文件
7、maxLines->最多可以显示几行文本
8、android:ellipsize=”start”—–省略号显示在开头 "...pedia"
android:ellipsize=”end”——省略号显示在结尾 "encyc..."
android:ellipsize=”middle”—-省略号显示在中间 "en...dia"
android:ellipsize=”marquee”–以横向滚动方式显示(需获得当前焦点时) 这个等会讲解案例使用TextView实现跑马灯效果会用到
9、includeFontPadding->当我们设置文字时,间距上下左右的间距会变大 那我们可以使用这个属性 缩小边距 达到更好的Ui
10、drawableStart|end|top|bottom ->引用一个资源在改文本的对应的
11、autoLink ->控制是否自动找到 url 和电子邮件地址等链接并将其转换为可点击的链接。默认值为“none”,禁用此功能。
2.2 Button
用途:按钮控件,用来响应按钮的点击事件,不一定使用这个控件来响应
简介:继承自TextView拥有TextView的所有属性
参考文档:https://developer.android.google.cn/guide/topics/ui/controls/button?hl=en
点击事件:点击事件的四种响应方式,常用的几种方式。视频详解,
相关控件:ImageButton 显示一个带有图像(而不是文本)的按钮 其它用法和Button类似,不详细解释,大家举一反三
2.3 EditText
用途:输入框,用来输入文本。
参考文档:https://developer.android.google.cn/reference/android/widget/EditText?hl=en
简介:继承自TextView拥有TextView的所有属性
常用属性:
1、inputType->输入类型
android:inputType=”none”
android:inputType=”text”
android:inputType=”textCapCharacters” 字母大写
android:inputType=”textCapWords” 首字母大写
android:inputType=”textCapSentences” 仅第一个字母大写
android:inputType=”textAutoCorrect” 自动完成
android:inputType=”textAutoComplete” 自动完成
android:inputType=”textMultiLine” 多行输入
android:inputType=”textImeMultiLine” 输入法多行(如果支持)
android:inputType=”textNoSuggestions” 不提示
android:inputType=”textUri” 网址
android:inputType=”textEmailAddress” 电子邮件地址
android:inputType=”textEmailSubject” 邮件主题
android:inputType=”textShortMessage” 短讯
android:inputType=”textLongMessage” 长信息
android:inputType=”textPersonName” 人名
android:inputType=”textPostalAddress” 地址
android:inputType=”textPassword” 密码
android:inputType=”textVisiblePassword” 可见密码
android:inputType=”textWebEditText” 作为网页表单的文本
android:inputType=”textFilter” 文本筛选过滤
android:inputType=”textPhonetic” 拼音输入
//数值类型
android:inputType=”number” 数字
android:inputType=”numberSigned” 带符号数字格式
android:inputType=”numberDecimal” 带小数点的浮点格式
android:inputType=”phone” 拨号键盘
android:inputType=”datetime” 时间日期
android:inputType=”date” 日期键盘
android:inputType=”time” 时间键盘
2、hint->提示文本
3、android:textColorHint ->设置提示文本的颜色
4、android:background="@null"
5、android:editable="false" 设置EditText不可编辑
2.4 ImageView
用途:用来显示图片
参考文档:https://developer.android.google.cn/reference/android/widget/ImageView?hl=en
常用属性:
1、src 设置图片的资源,src填入图片时,是按照图片大小直接填充,并不会进行拉伸。
2、ScaleType 属性,这边介绍几个常用的属性,其它不常用的大家可以课后去试一下:
2.1 centerCrop 包持横纵比缩放图片,直至完全覆盖ImnageView为止,缩放后的图片如果超过ImageView则做
2.2 fitXY 将图片缩放至整个控件大小,这边的缩放的比例是不一样的,会导致图片变形
3 常见的ViewGroup
3.1 FrameLayout(帧布局)
帧布局可以说是最简单的ViewGroup。当我们往里面添加控件的时候,会默认把控件放在左上角,如果放多个会有叠加效果,这种布局没有任何的定位方式。
参考文档:https://developer.android.google.cn/reference/android/widget/FrameLayout?hl=ch
3.2 LinearLayout (线性布局)
android:orientation 布局方向,有两个值可选,horizontal水平,vertical竖直
layout_weight 设置控件的比例
参考文档:https://developer.android.google.cn/reference/kotlin/android/widget/LinearLayout?hl=en
3.3 RelativeLayout(相对布局)
android:layout_centerHrizontal 水平居中
android:layout_centerVertical 垂直居中
android:layout_centerInparent 相对于父控件完全居中
android:layout_alignParentBottom 贴紧父控件的下边缘
android:layout_alignParentLeft 贴紧父控件的左边缘
android:layout_alignParentRight 贴紧父控件的右边缘
android:layout_alignParentTop 贴紧父控件的上边缘
android:layout_marginBottom 离某控件底边缘的距离
android:layout_marginLeft 离某控件左边缘的距离
android:layout_marginRight 离某控件右边缘的距离
android:layout_marginTop 离某控件上边缘的距离
android:layout_below 在某控件下方
android:layout_above 在某控件上方
android:layout_toLeftOf 在某控件的左边
android:layout_toRightOf 在某控件的右边
android:layout_alignTop 本控件的上边缘和某控件的上边缘对齐
android:layout_alignLeft 本控件的左边缘和某控件的左边缘对齐
android:layout_alignBottom 本控件的下边缘和某控件的下控件对齐
android:layout_alignRight 本控件的右边缘和某控件的有边缘对齐
注意:
官方提示为了获得更好的性能和工具支持(更多的功能),我们要使用 ConstraintLayout ,这个布局我们后面再来讲
第三章 Activity的使用
参考文档:https://developer.android.google.cn/guide/components/activities/intro-activities?hl=zh_cn
1.什么是activity?
翻译成中文:活动
视觉上讲:用来做界面展示的,比如。。
代码上讲:继承自Activity及其子View
2.创建自己的activity
创建Activity的两种方式:
1、新建类
2、使用as提供的代码模板
注意点:
清单文件,此元素唯一的必要属性是 android:name,该属性用于指定 Activity 的类名称。
3.activity的跳转
显示跳转:
Intent intent = new Intent(this,SecondActivity.class);
startActivity(intent);
隐式跳转:
3.1 通过action进行跳转
//需要在AndroidManifest.xml中配置action
Intent intent = new Intent("android.intent.action.mydialog");
startActivity(i);
3.2 通过uri进行跳转
//拨打电话程序
Uri uri = Uri.parse("tel:10086");
Intent intent = new Intent(Intent.ACTION_DIAL,uri);
startActivity(intent);
3.3 通过startActivityForResult()启动Activity
4.使用Intent传递数据和接收数据
intent.putXXX(key,value);
5.activity的生命周期
onCreate()
必须实现这个回调方法,它会在系统首次创建Activity的时侯触发。
onStart()
当 Activity 进入 Started 状态时,系统会调用此回调。调用onStart时对用户可见的,但是用户不可交互,也不会停留在这个页面。该方法完成的非常快,并且与onCreate()
一 样,不会停留在界面。完成这个回调之后,系统紧接着会进去Resumed状态。
onResume()
此时,该Activity()位于Activity()的栈顶。并且会捕获所有用户输入,此时用户可以和应用程序做交互。
onPause()
当用户点击返回或者切换到别的页面时,Activity失去焦点并进入'onPause()'状态。
onStop()
系统调用此方发作为用户离开你的Activity的第一个指示(尽管这并不总意味着活动正在被销毁);表明activity已经不在前台展示。停止动画和刷新UI
onDestroy()
onDestroy()在活动被销毁之前调用。系统会除掉这个生命周期的原因是:
1、由于用户关闭Activity界面,或者开发者自己调用finish()函数关闭Activity导致的。总之是Activity被关闭的时候调用的。
2、由于配置更改,比如说屏幕发生旋转。
这是Activity最后一个方法。可以用isFinishing()来判断它,如果有dialog在运转,要在这个界面将dialog给cancel掉,不然抛异常。
6.切换activity的生命周期
1、ActivityA 切换到ActivityB的生命周期变化:
onPause() ->onStop()
2、ActivityB返回到ActivityA的生命周期变化:
onStart()->onResume()
3、ActivityA回退到桌面的生命周期变化
onPauser() ->onStop() ->onDestroy()
7、Actiivty的回退栈
8、actiivty的启动模式
在清单文件中声明Activity时,我们可以使用
standard (默认模式)
这种模式下Activity可以有多个实例,每次启动Activity不管堆栈中是否有Activity这个实例,系统都会创建一个实例。
SingleTop
SingleTop和standard模式非常相似,主要区别就是当一个Activity已经位于栈顶,再去启动它时,不会再创建新的实例,如果不位于栈顶,就会创建新的实例。
SingleTask
这种模式下Activity在同一个Task内只有一个实例,如果Activity位于栈顶,系统不会创建新的实例,和SingleTop模式一样,但Activity已经存在或者Activity不位于栈顶时,会
把activity移到栈顶。
测试:调用函数的不同 onNewIntent()
SingleInstance
SingleInstance模式也是单例,但与SingleTask不同,SingleTask只是任任务栈内单例。使用singleInstance 的Activity在整个系统中只有一个实例。启动一个模式为singleInstance的
Activity时,系统会创建一个新的任务栈,并且这个任务栈只有它一个Activity。
SingleInstance模式并不常用,如果我们把一个Activity设置为singleInstance模式,你会发现它启动时会慢一些,切换效果不好,影响用户体验。
9、知晓当前是在哪个Activity
我们可以创建一个自己的BaseActivity,在其中的Activity打因日志。
好处:在项目比较复杂且项目不熟悉的情况下我们可以快速定位当前的页面
10、启动Activity的最佳方式
当前类定义一个静态函数,需要传的参数写在这个函数里面
好处,协同开发中。对于不熟悉业务的人来说,别人可以更好的去使用你的activity
第四章 Fragment的使用
这篇是我前端时间写的文章,这部分的课程就根据我写的文章来说
https://juejin.cn/post/7042134750542168100
第五章 BroadcastReceiver(广播)的使用
以我前段事件写的博客来讲解
https://juejin.cn/post/7043453750886793230
第六章 数据持久化存储
1.文件存储
2.SharedPreferences(SP)存储
2.1使用so实现记住密码
3.数据库存储
//适合存储一些比较大比较复杂的数据
//前面学到sp适合存储一些较小的数据,一些配置信息
//缺点:比较麻烦
第六章 Android权限机制详解
第六章 ContentProvider详解