安卓开发-基础知识补习

听说点赞关注的人,身体健康,万事如意,工作顺利,爱情甜蜜,一夜暴富,升职加薪……最终迎娶白富美!!!

微信公众号:炜煜gzs

安卓开发-基础知识补习

内容简介:本文通过学习小破站视频,介绍了安卓开发一些简单的基础知识,补上了没有系统学过的内容,不是很完善。写的比较潦草和简单,这是第一遍简单的过视频,所以一切都写的比较仓促(二倍速听),通过阅读和观看实现了java开发安卓的基础知识补充,使用java代码进行开发,如果有问题的地方请不吝指教,如果对文内内容有不理解的地方,也希望能积极主动的联系博主进行深刻的探讨,以便于更好的让博主记住这篇博文的内容,好让博主在发光发热的道路上越走越远。[手动狗头]努力,奋斗!

标题一:Notification 通知

  1. 创建NotificationManager 对象

    NotificationManager类是一个通知管理器类,这个对象是由系统维护的服务,是以单例模式的方式获得,所以一般 并不会直接实例化这个对象,在Activity中可以使用Activity.getSystemService(String)方法可以通过Android系统初级服务的句柄,返回对应的对象,在这里需要返回NotificationManager,所以直接传递Context.NOTIFICATION_SERVICE即可。

  2. 使用Builder构造器来创建Notification对象

    使用NotificationCompat类的Builder构造器来创建Notification对西安给,可以保证程序在所哟䣌版本上都能正常工作。Android8.0新增了通知渠道这个概念,如果没有设置,则通知无法在Android8.0的设备上显示。

    由于视频讲解的AndroidSDK版本有点老,过时了,代码无法调试,所以只能听讲,然后反思其中的道理,并且分析使用的功能和发现其中实现的步骤。

思考:

  • 做apk的时候需要考虑到安卓的版本问题,需要对不同的SDK做适配,并且要知道各个版本之间的区别。要谨慎的使用各种新的方法新的类,否则导致低版本安卓无法使用apk。
  • 逐帧动画(AnimationDrawable)
    1. 帧动画,创建animation-list来添加图片的src;android:duration:控制播放时间。
    2. 需要启动和停止动画(java中通过添加播放代码,进行图片的播放启动事件)
  • 补间动画
    • 设置透明度,旋转,缩放,平移,来实现补间动画。
    • 设置初始值,结束值,变化时间。from,to,duration;
  • 属性动画
    • ValueAnimator:属性动画,直接在java代码中编写
    • 设置执行周期
    • 设置更新监听过程。addUpdateListener
  • ObjectAnimator:想要去控制哪个控件就使用该类。
  • 监听器动画设置:
    • addListener,并且重写回调方法。动画开始,结束,取消,循环等。可以采用适配的方式来实现动画。
  • 了解单位和尺寸:
    • px:像素 1440px * 3040px ->代表有1440个像素点和3040个像素点。
    • pt:point,是一个标准的长度单位,1pt=1/72英寸,用于印刷业,非常简单易用。
    • dip:device independent pixel(设备独立像素),不同设备有不同过的显示效果,这个和设备硬件有关,一般我们为了支持WVGA,HVGA,QVGA推荐使用,不依赖像素。适配不同屏幕的单位;
    • dp:就是dip;
    • sp:scaled pixels:主要用于字体显示,best For Textsize
  • ViewPage
    • 一个Activity添加多个Layout;
    • 先创建一个ViewPage(在主Activity中,并且设置ID);
    • 在MainActiity类中获取ViewPage;
    • 编写适配器类。继承自PageAdapter,实现四种回调方法。
      • getCount():返回有多少个layout界面。
      • instantiateItem():将给定位置的view添加到ViewGroup(容器)中,创建并显示出来。
      • 返回一个代表新增页面的Object(key)通常都是直接返回view本身就可以了,当然你可以自定义自己的key但是key和每个view要匹配一一对应。
      • isfViewFromObject()判断instantiateitem(ViewGroup,int)函数所返回来的Key于一个页面视图是否代表的同一份视图(即他俩是否是对应的额,对应的表示同一个View),通常直接写return view == Object
      • destroyItem():移除一个给定位置的页面,适配器有责任从容器中删除这个视图。这是为了确保在finishUpdate(viewGroup)返回时视图能够被移除。而另外两个方法则是涉及到一个key的东东。
  • MVVM项目实战
    • View层 ———ViewModle ———Moudle层
    • MVVM模式于MVP模式差不多
      • 简化了MVP,没有那么多接口
      • 采用了双向绑定,View的变动,自动反应到ViewModel,反过来一样的。
  • ProgressBar:进度条
    • 各种类型的进度条,条形,环形,需要的时候可以去CSDN按照大佬们整理的内容按需求拿。
    • 添加进度条之后需要添加新的线程,配置更新进度条的进度。
  • 星级评分条:RatingBar
    • layout_above:设置布局在某个布局的前面
    • rating:设置有几颗星
    • 然后在类里面获取对象并且为按钮添加触摸事件。
  • 图像视图
    • 主要是用来显示图片
    • 如何添加图片视图
      • 使用ImageView标签设置布局的宽高,
      • 放到drawable目录下面
      • 使用src属性添加需要显示的图片。
      • 要对图片进行开发的时候,就需要设置图像控件的宽高。等比例缩放。占满整个控件使用scaleType属性,fitXY,就是占满整个控件。center,剧中,centerCrop保持纵横比进行缩放。matrix
      • adjustViewBounds:太吵了设置不了后面需要的时候再查询再设置演示。
      • 设置最大宽度和最大高度maxHeight,maxWidth
      • tint:设置图像的蒙版,可以设置为各种颜色,实现美图秀秀的功能。
    • 图像切换器:ImageSwitcher
      • 使用该功能不需要使用适配器,通过重写makeView方法来实现图像的控制。设置视图工厂。
      • 可以通过触点坐标的差值来判断手指移动的方向。
    • 下拉列表框:Spinner
      • 设置宽高为布局自己的高度
      • 指定列表项目:entries(需要定义数组资源并传入此处)。数组资源提娜佳到values文件夹内。
      • 可以通过适配器来控制显示的列表项。
      • 可以getSelectedItem获取选中的值。
      • 为下拉列表添加监听器,选择列表项监听器;
      • 通过重写的方法获取选中的item
    • 列表视图:ListView
      • 列表都设置为与父容器相同
      • 通过entries设置列表内容
      • 通过适配器来指定列表内容
      • 创建ArrayAdapter;
      • Map用来存放键值对类型,比如姓名和图片显示一个人的信息。
      • 创建一个SimpleAdapter适配器。
      • listView的适配器较为复杂,需要的时候需要重点考虑一下。
      • 如果这个控件含有多个子控件,那我们就设置setItemClick事件来为元素添加监听事件。
    • 滚动视图:ScrollView
      • 滚动视图是比较常用的开发视图
      • 两种方法,一种是在xml文件中添加滚动视图,另一中在java代码中添加滚动视图的代码。
      • 默认为垂直的滚动视图,HorizontalScollView:这个是水平滚动的布局形式
      • 一个滚动视图中只能放置一个组件,如果放置多个就会报错。要使用布局管理器括起来。
    • 多选项卡
      • 在布局文件中添加TabHost组件
      • 添加TabWidge组件
      • 添加TabContext组件
      • 编写各标签页的xml布局文件
      • 获取并初始化TabHost组件
      • 为TabHost对象添加标签页

标题二:Activity概述

Activity的四种状态

  • 运行状态:可以看到并且可以浏览
  • 暂停状态:如果处于是否推出应用界面的时候就处于暂停状态
  • 停止状态:点击确认之后就是停止状态
  • 销毁状态:点击强制停止之后就是销毁状态

Activity的生命周期

应用程序的图标被点击-》启动activitythread-》线程的入口main函数-》创建activitythread-》绑定activitythread thread.attach(false,startSeq)-》创建仪表类生命周期,管理程序的生命进程mInstrumentation = new Instrumentation();-》创建上下文Context ContextImpl context = ContextImpl.createAppContext(this,getSystemContext().mPackageInfo);-》创建应用程序 mInitialApplication = context.mPackageInfo.makeApplication(true,null);-》回调application的onCreate方法

启动Activity的流程:

ActivityThread->handleLaunchActivity->performLaunchActivity->创建activity的上下文createBaseContextForActivity->创建启动的⻚面activity=mInstrumentation.newActivity(cl,component.getClassName(), r.intent);->将界面和window绑定activity.attach(appContext,getInstrumentation,window)->调用onCreate方法布局activity界面mInstrumentation.callActivityOnCreate(activity, r.state);->activity.performCreate(icicle);->onCreate(icicle);在Activity的子类中通过实现onCreate方法来对界面进行初始化(UI布局,逻辑初始化)什么是Context上下文ApplicationActivityService有上下文运行环境Context提供了访问系统资源的方法可以理解为就是一个桥梁设备<->Context<->界面

:2:当从写父类的方法时,是否需要调用父类的方法:当父类的实现是空的时,一般是不需要回调的,
如果父类有实现,通常需要使用super调用以下父类,

3:什么是上下文:Context

application activity service是有上下文,运行环境的,context提供了访问系统资源的方法,可以作为一个设备与界面之间的桥梁

4:activity的各个时期所要调用的方法
onCreate()方法:
必须实现此回调,它会在系统创建 Activity 时触发。实现应该初始化 Activity 的基本组
件:例如,在此处创建视图并将数据绑定到列表。最重要的是,在此处调⽤setContentView() 来定义 Activity 界⾯的布局

onStart()方法:
onCreate() 退出后,Activity 将进⼊“已启动”状态,并对⽤户可⻅。此回调包含 Activity 进⼊前台
与⽤户进⾏互动之前的最后准备⼯作。

onResume()方法:
系统会在 Activity 开始与⽤户互动之前调⽤此回调。此时,该 Activity 位于 Activity 堆栈的顶部,
并会捕获所有⽤户输⼊。应⽤的⼤部分核⼼功能都是在 onResume() ⽅法中实现的。

onPause()方法:
当 Activity 失去焦点并进⼊“已暂停”状态时,系统就会调⽤ onPause()。例如,当⽤户点按“返回”
或“最近使⽤的应⽤”按钮时,就会出现此状态。当系统为您的 Activity 调⽤ onPause() 时,从技术
上来说,这意味着您的 Activity 仍然部分可⻅,但⼤多数情况下,这表明⽤户正在离开该
Activity,该 Activity 很快将进⼊“已停⽌”或“已恢复”状态。
如果⽤户希望界⾯继续更新,则处于“已暂停”状态的 Activity 也可以继续更新界⾯。例如,显示导
航地图屏幕或播放媒体播放器的 Activity 就属于此类 Activity。即使此类 Activity 失去了焦点,⽤
户仍希望其界⾯继续更新。

onStop()方法:
当 Activity 对⽤户不再可⻅时,系统会调⽤ onStop()。出现这种情况的原因可能是 Activity 被销
毁,新的 Activity 启动,或者现有的 Activity 正在进⼊“已恢复”状态并覆盖了已停⽌的 Activity。
在所有这些情况下,停⽌的 Activity 都将完全不再可⻅。

onRestart()方法:
当处于“已停⽌”状态的 Activity 即将重启时,系统就会调⽤此回调。onRestart() 会从 Activity 停
⽌时的状态恢复 Activity。
此回调后⾯总是跟着 onStart()。

onDestroy()方法:
系统会在销毁 Activity 之前调⽤此回调。
此回调是 Activity 接收的最后⼀个回调。通常,实现 onDestroy() 是为了确保在销毁 Activity 或包
含该 Activity 的进程时释放该 Activity 的所有资源。

5:不同操作时,activity周期变化
程序第一次启动时:
oncreate->onstart->onResum
程序切换到后台时:
onpause->onstop
程序从后台切换回来时:
onRestart->onStart->onResum
如果当前界面是第一个界面,且按返回按钮时进入桌面时:
onPause->onStop->onDestory
从当前界面切换到其他界面时:
onPause->onStop
从下一个页面切换回来时:
onRestart->onStart->onResum
当由横屏变为竖屏(或由竖屏变横屏)时:
onPause->onStop->onDestory->onCreate->onStart->onResum

在界面被销毁之前会调用
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
}

在界面被销毁之前可以在该方法中存储数据
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putString(“lfl”,“要被销毁了”)
}

在onCreate方法中将数据取出
savedInstanceState?.getString(“lfl”)
用bundle存取数据

用lifecycle监听生命周期:
一:从写一个类,将数据放在该类里面
二:让该类继承与lifecycleobserver
class GaodeMap :LifecycleObserver{
//二:标记,当要什么时候调用就标记成什么时候,
//如init()要在create时就调用,则标记为on_create
//三:添加一个监听器,需要在哪监听该类就在哪加
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
fun init(){
Log.v(“lfl”,“create方法”)
}
//该方法会在onStart时调用
@OnLifecycleEvent(Lifecycle.Event.ON_START)
fun connect(){
Log.v(“lfl”,“开始连接获取用户信息”)
}

}
三:添加一个监听器,哪个activity需要在各时期调用以上方法,便在哪个activity的类中添加
//添加的生命周期的监听器,
lifecycle.addObserver(GaodeMap())//是需要一个lifecycleobserver参数,但是我们的类是继承于lifecycleobserver,
所以只需要初始化一个该类

标题三:多个Activity的使用

Activity之间交换数据

通过intent传递信息,保存信息到Intent中,然后传递,但是intent不具备保存数据的功能,要使用Bundle来保存数据,类似Map结构,以键值对存储数据。

先创建Intent对象,再获取数据,然后创建Bundle对象,然后保存到bundle中使用bundle.putCharSequence(key,value)方法保存数据。然后使用intent.putExtra(bundle)方法将bundle保存到intent中,然后启动要启动的Activity。startActivity(intent);然后在新的activity中,Intent intent = getItent();Bundle bundle = intent.getExtras();

分别获取保存的信息。

调用另一个Activity并返回结果

startActivityForResult()方法

第一个参数是Intent对象,第二个是一个请求码,标识请求的来源。

fragment

一个activity可以包含很多个fragment;

fragment的生命周期:一个fragment必须嵌入到一个activity中,当activity被暂停或是被销毁的时候,fragment就会被暂停或被销毁。

创建fragment:继承fragment类或者继承其他的已经是fragment的子类的类。

两种方式:

​ 直接在xml文件中编辑添加fragment,在activity运行的时候添加fragment。

Intent 意图 意识

Activity,Service,Broadcast Reciver通过intent来连接,

intent和bundle需要记一下。

相对布局管理器;RelativeLayout

单机事件与触摸事件的区别:

​ onTouch事件和onClick事件。单机与触摸的区别:单击事件触发一个事件,触摸事件触发一系列事件。

手势检测器:GestureDetector

使用动画控制多个组件之间的切换效果,为了展示图片可以采用这个控件。需要创建动画图片。比如淡入淡出等等。

Animation

标题四:

内容总结:本文简单介绍了博主没有学过的安卓开发基础,还有一大批知识点没有写到本文内,后续内容可以继续追踪博主的后续文章,或许会介绍相关的内容,如果没介绍,请用力踢一脚,好让摸鱼的博主积极主动的去认识错误并及时改正,在发光发热的道路上越走越远……

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

NoSuchManException

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

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

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

打赏作者

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

抵扣说明:

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

余额充值