版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Android概述1、Android概述2、Android基本UI控件之13、Android基本UI控件之24、Android高级UI控件之15、Android高级UI控件之26、Android高级UI控件之37、Android高级UI控件之48、Android高级UI控件之59、Android本地存储之110、Android本地存储之211、Android本地存储之312、Android本地存储之413、服务与广播之114、服务与广播之215、服务与广播之316、服务与广播之417、Android网络通信之118、Android网络通信之219、Android网络通信之320、Android网络通信之4Android基本UI控件的使用Android高级UI控件的使用数据存储服务与广播网络通信课程内容Android概述03ABCD04020105QQDemoV1QQDemoV2QQDemoV3简单音乐播放器世界杯球队投票Why为什么选用Android?Android概述Why2019年2月搜索结果1284Android概述Why2020年2月搜索结果1241Android概述Why谋求一份薪水不错的工作1038Android概述Why自己抽空赚点小钱Android概述WhyAndroid概述Why自主创业Android概述Android一词最早出现于法国作家利尔亚当在1886年发表的科幻小说《未来夏娃》中。他将外表像人的机器起名为Android。Android的Logo是由伊琳娜-布洛克设计的,据说设计灵感来源于男女厕所门上的图形符号,外加头上两根天线。Android名字与Logo的由来Android概述灵感2003年10月,AndyRubin等人创建Android公司,并组建Android团队。2005年8月17日,Google低调收购了成立仅22个月的高科技企业Android及其团队。安迪鲁宾成为Google公司工程部副总裁,继续负责Android项目。Android发展史Android概述2007年11月5日,谷歌公司正式向外界展示了这款名为Android的操作系统,并且宣布建立一个全球性的联盟组织,该组织由34家手机制造商、软件开发商、电信运营商以及芯片制造商共同组成,并与84家硬件制造商、软件开发商及电信营运商组成开放手持设备联盟来共同研发改良Android系统。Google以Apache免费开源许可证的授权方式,发布了Android的源代码。Android发展史Android概述2008年HTC发表了HTCDream手机(美国称HTCT-MobileG1),这也是全球首款采用Android系统的智能手机。HTCDream配备着滑出式实体键盘,搭载3.17英寸屏幕,分辨率为320x480,16mm的厚度。第一款Android智能手机发布Android概述Apple的AppStore是2008年跟着iPhone3G一起推出,因此也带动iOS手机的成熟,AndroidMarket则稍微晚了一点,等到2008年10月22日才正式诞生,现在已改名成GooglePlayAndroidMarket首次亮相Android概述Google发布了首款自家手机Android概述一开始Google只专注在Android系统,但随着智能手机市场越来越成功,2010年1月5日Google与HTC合作,推出首款NexusOne手机2014年Google决定进入智能手表市场,宣布推出针对穿戴式设备所设计的AndroidWear系统,LGGWatch是首款搭载此系统的智能手表,之后还有SamsungGearLive与Moto360AndroidWear智能手表登场Android概述Android在正式发行之前,最开始拥有两个内部测试版本,并且以著名的机器人名称来对其进行命名,它们分别是:阿童木(AndroidBeta),发条机器人(Android1.0)Android版本的演进Android概述由于涉及到版权问题,从2009年5月开始,Android操作系统改用甜点来作为版本代号,这些版本按照从C大写字母开始的顺序来进行命名Android版本的演进Android概述Android10开始,以甜点命名的“传统”结束了Android版本的演进Android概述Android版本开发代号API级别备注Android1.5Cupcake(纸杯蛋糕)APILevel3
Android1.6Donut(甜甜圈)APILevel4
Android2.0/2.1Eclair(松饼)APILevel5-7
Android2.2Froyo(冻酸奶)APILevel8
Android2.3Gingerbread(姜饼)APILevel9-10
Android3.0/3.1/3.2Honeycomb(蜂巢)APILevel11-13平板专用Android4.0IceCreamSandwich(冰激凌三明治)APILevel14-15
Android4.1/4.2/4.3JellyBean(果冻豆)APILevel16-18
Android4.4KitKat(巧克力棒)APILevel19-20
Android5.0/5.1Lolipop(棒棒糖)APILevel21-22
Android6.0Marshmallow(棉花糖)APILevel23
Android7.0/7.1Nougat(牛轧糖)APILevel24-25
Android8.0/8.1Oreo(奥利奥)APILevel26-27
Android9.0Pie(派)APILevel28
Android10AndroidQAPILevel29源代码完全开放,便于开发人员更清楚的把握实现细节,便于提高开发人员的技术水平,有利于开发出更具差异性的应用。运营商的大力支持,产业链条的热捧。良好的盈利模式(3/7开),产业链条的各方:运营商、制造商、独立软件生产商都可以获得不错的利益。将移动终端的评价标准从硬件向软件转变,极大的激发了软件开发者的热情。Android的源代码遵循ApacheV2软件许可,而不是通常的GPLv2许可。有利于商业开发。具有强大的Linux社区的支持。Android的优势Android概述安全性:在Android6之后,大为改善开发语言的变化风险:GoogleIO2017宣布了Kotlin会成为Android官方开发语言(9行代码索赔88亿美元)碎片化问题:简单的说就是Android平台的差异化越来越大。设备多、品牌多、分辨率多、版本多。Android的隐患Android概述Android的系统架构Android概述Dalvik、ART和JVMAndroid概述Dalvik(DVM)和ART都是适用于安卓平台的虚拟机,但不属于Java虚拟机。在Dalvik下,应用每次运行的时候,字节码都需要通过即时编译器(justintime,JIT)转换为机器码。在ART中,应用在第一次安装的时候,字节码就会预先编译成机器码,使其成为真正的本地应用。这个过程叫做预编译(AOT,Ahead-Of-Time)。校外资源https://////校内vpn资源1/skills/85373752常用资源Android概述系统要求Windows(32-or64-bit)MacOSLinux安装程序下载网址/任务1搭建Android开发环境Android概述设置AndroidStudio主题设置字体、自动补全代码方式取消自动更新常用的快捷键:
Alt+Enter:问题自动修正。Ctrl+Alt+Space:类名或接口名提示Ctrl+p:参数提示。Alt+Insert:可以生成构造器、Getter/Setter、重写方法等。Ctrl+Alt+T:可以把代码包在一块内,如try/catch。任务2配置AndroidStudioAndroid概述AndroidStudio新建工程,HelloWorld,默认设置创建模拟器,运行。任务3开发第一个Android应用Android概述Activity启动流程Android概述Android基本UI控件之一本次课程的要求Android基本UI控件应知1、了解Android应用的基本结构;2、了解常用的布局;3、了解简单UI控件的使用。应会1、会使用布局设计界面;2、会使用AndroidStudio集成开发环境;3、能完成简单Android程序的开发。回顾上次课的HelloWorld项目在Activity中如何显示界面的?R是什么?回顾与引入Android基本UI控件通过程序修改TextView中显示的信息为什么是findViewById方法来查找组件所有的组件都是View的子类?试一试Android基本UI控件基本所有的高级UI控件都继承自View类比如:TextView,Button,List,EditText,RadioButton,Checkbox一个View就是屏幕上一块矩形区域,负责渲染和上面的事件处理,并可以设置该区域是否可见,是否可以获取焦点等。那如果需要多个控件组合成一个复杂界面,该如何实现呢?视图控件(View)Android基本UI控件ViewGroup的父类是View,作用是View的容器,负责对添加进ViewGroup的这些View进行布局管理,并且相互之间也可以添加。视图容器控件(ViewGroup)Android基本UI控件自从AndroidStudio2.3起,ConstraintLayout布局成为用户创建新的Activity时默认根布局,是相对布局(RelativeLayout)的替换版本。通过使用该布局,可以极大的减少复杂布局的嵌套深度,提升运行速度。约束布局(ConstraintLayout)Android基本UI控件自从AndroidStudio2.3起,ConstraintLayout布局成为用户创建新的Activity时默认根布局,是相对布局(RelativeLayout)的替换版本。通过使用该布局,可以极大的减少复杂布局的嵌套深度,提升运行速度。约束布局(ConstraintLayout)Android基本UI控件点击按钮,更换背景图片Android基本UI控件课堂练习Android基本UI控件提交课堂作业LinearLayout是一种Android中最常用的布局之一,它将自己包含的子元素按照一个方向进行排列。方向有两种:水平或竖直
android:orientation=“horizontal"android:orientation="vertical"线性布局(LinearLayout)Android基本UI控件如果无子控件的View设置此控件,表示其内容的重力倾向,即常说的对齐方式;对于有子控件的View,则设置其子控件的重力倾向。layout_gravity的使用android:gravity属性Android基本UI控件表格布局就是以表格形式来放置UI组件的一种布局,通过行和列来标识一个组件的位置。其实Android的表格布局跟HTML中的表格布局非常类似,TableRow就像HTML表格的<tr>标记。自己动手实现右图的界面表格布局(TableLayout)Android基本UI控件网格布局(GridLayout)是在Android4.0SDK之后引入的布局样式,GridLayout可以用来做一个象TableLayout这样的布局样式,但其性能及功能都要比TableLayout要好,比如GridLayout的布局中的单元格可以跨越多行,且渲染速度也比TableLayout要快。自己动手实现右图的界面网格布局(GridLayout)Android基本UI控件最基本的Android应用程序组件,应用程序中,一个活动通常就是一个单独的屏幕。每一个活动都被实现为一个独立的类,并且从活动基类中继承而来,活动类将会显示由视图控件组成的用户接口,并对事件做出响应。Activity活动Android基本UI控件Activity活动Android基本UI控件AppCompatActivity是support.v7包里面用来替代Activity的组件,是Activity的子类,主要用来兼容Android5.0之后的新特性。AppCompatActivity与ActivityAndroid基本UI控件AndroidManifest.xml是每一个应用都需要的文件,位于应用根目录下,它描述了程序包的全局变量,包括暴露的应用组件(activities,services等)和为每个组件的实现类,什么样的数据可以操作,以及在什么地方运行。AndroidManifest.xml文件Android基本UI控件创建工程QQDemoV1,然后新建LoginActivity复制图片到相应目录设置string.xml,完成界面搭建任务1登录界面的搭建Android基本UI控件Android基本UI控件之二本次课程的要求Android基本UI控件应知:了解Android应用的基本结构;了解常用UI组件的使用;了解Selector、style以及Intent的相关知识应会会使用布局和简单组件设计界面;会使用Selector、style美化界面;会使用Intent实现跳转;能完成简单Android程序的开发回顾上次课完成的任务1能否将界面设计的更美观一点?回顾与引入Android基本UI控件任务2美化界面Android基本UI控件Selector(选择器),在Android中常常用来作控件的背景,这样做的好处是省去了用代码控制实现控件在不同状态下变换不同的背景颜色或图片。它分为两种:Color-Selector:就是颜色状态列表,可以跟color一样使用,颜色会随着组件的状态而改变。Drawable-Selector:是背景图状态列表,可以跟图片一样使用,背景会根据组件的状态变化而变化。SelectorAndroid基本UI控件注意:作为drawable资源使用时,一般放于drawable目录下,item必须指定android:drawable属性;作为color资源使用时,则放于color目录下,item必须指定android:color属性。提交课堂练习课堂练习Android基本UI控件提交课堂练习课堂练习Android基本UI控件样式(Style)是指为View或Activity指定外观和格式的属性集合。样式以XML文件的形式进行定义,可以指定高度、填充、字体颜色、字号、背景色等许多属性。与网页设计中层叠样式表的原理类似,通过它可以将设计与内容有效分离。比如在上面的例子中,我们需要所有的按钮都有同样的外观,就可以将这些设置为样式。StyleAndroid基本UI控件<stylename="BtnStyle">
<itemname="android:background">@drawable/btn_bg_selector</item>
<itemname="android:textColor">@color/btn_color_selector</item>
</style>主题(Theme)是指对整个应用或Activity使用的样式,而不是对单个View(如上例所示)应用的样式。以主题形式应用样式时,Activity或应用中的每个视图都将应用其支持的每个样式属性。注意:我们如果是对单个视图应用样式,则在布局文件中对指定的View元素(如Button)添加style属性。如果要对整个Activity或应用来应用样式,则需要在AndroidManifest.xml文件中,为activity或application元素添加android:theme属性。主题(Theme)Android基本UI控件课堂作业Android基本UI控件任务3实现忘记密码功能Android基本UI控件意图(Intent)是一种运行时绑定(run-timebinding)机制,它能在程序运行过程中连接两个不同的组件。通过Intent,你的程序可以向Android表达某种请求或者意愿,Android会根据意愿的内容选择适当的组件来完成请求,使实现者和调用者完全解耦。简单来说,就是当我们在Activity1中需要启动Activity2时,并不是直接创建Activity2的对象,然后调用其方法,而是将这个想法通过Intent传递给Android系统,由Android系统完成。意图(Intent)Android基本UI控件component(组件):指明了将要处理的组件(如Activity、Service等),所有的组件信息都被封装在一个ComponentName对象之中,这些组件都必须在AndroidManifest.xml文件中的“<application>”中注册;action(动作):设置该Intent会触发的操作类型,可以通过setAction()方法进行设置,也可以在AndroidManifest.xml中组件节点中的<intent-filter>节点指定一个Action用于标识该组件所能接受的“动作”。Intent主要属性Android基本UI控件category(类别):对执行操作的类别进行描述,可以通过addCategory()方法设置多个类别,也可以在AndroidManifest.xml中组件节点中的<intent-filter>节点中作为<intent-filter>子元素来声明的。data(数据):描述Intent所操作数据的URI及类型,可以通过setData()进行设置,不同的操作对应着不同的Data。Intent主要属性Android基本UI控件显示调用:直接指定调用的Activity隐式调用:不明确指定启动哪个Activity,而是设置Action、Data、Category,让系统来筛选出合适的Activity。筛选是根据<intent-filter>来筛选。Intent的显示调用和隐式调用Android基本UI控件参照书本任务2.3的相关接收,实现忘记密码界面。课堂作业Android基本UI控件Android高级UI控件之一本次课程的要求Android高级UI控件应知:了解Adapter的工作原理;了解ListView、Spinner等控件的使用应会会使用基本的适配器;会使用ListView、Spinner等显示控件;能完成简单Android程序的开发回顾上一章的内容能否使用基本UI控件实现右图界面?回顾与引入Android高级UI控件适配器控件(AdapterView)继承自ViewGroup(一个包含其他子视图的容器),需要通过特定的适配器将其中的子控件与特定数据绑定起来,并以合适的方式显示并操作一些数据(数组、链表、数据库等)。常用的适配器控件有Spinner、ListView、GridView、Gallery、ViewPager。适配器控件Android高级UI控件适配器(Adapter)是连接后端数据和前端显示的适配器接口,是数据和UI(View)之间一个重要的纽带。Adapter负责创建用来表示每一个条目的View组件,并提供对底层数据的访问。适配器(Adapter)Android高级UI控件ArrayAdapter:适合用在显示纯文本的场合SimpleAdapter:适合用在图文混排场合CursorAdapter:适合用在由Cursor提供数据的场合BaseAdapter:适合功能自定义的场合常用的适配器Android高级UI控件ArrayAdapter:主要用于纯文本数据的显示。将集合中每个元素的值转化为字符串,填充到不同的TextView对象中,再显示到适配器控件中。Spinner(下拉列表控件),可以将多个View组件以下拉列表的形式组织起来。它的数据来源于与之关联的适配器,可通过对下拉事件和下拉点击事件的监听,实现对不同情况的处理ArrayAdapter与Spinner结合使用Android高级UI控件ArrayAdapter与Spinner结合使用Android高级UI控件小结Android高级UI控件获取适配器控件(Spinner)findViewById(),定义数据源数组创建ArrayAdapter对象。上下文对象context用来显示信息的行布局id-R.layout.support_simple_spinner_dropdown_item数据源数组通过调用适配器控件(Spinnr)的setAdapter()方法,为其指定关联的适配器对象提交课堂练习课堂练习Android高级UI控件 SimpleAdapter:主要用于在适配器控件中显示复杂的View对象。将集合对象中单个对象中的不同数据项,填充到View中的不同控件中,再显示到适配器控件中。ListView(列表视图控件):可以将一些零散的控件以列表的形式组织起来,并为其中的列表项添加事件监听。SimpleAdapter与ListView结合使用Android高级UI控件SimpleAdapter与ListView结合使用Android高级UI控件小结Android高级UI控件获取适配器控件(ListView)findViewById(),定义数据源多个数组创建SimpleAdapter对象。上下文对象context用来显示信息的行布局id自定义的布局文件R.layout.item_layout数据源List<HashMap<String,Object>>映射关系控件和数据的对应关系调用适配器控件(ListView)的setAdapter()方法课堂作业Android高级UI控件提交课堂练习BaseAdapter:是以上适配器类的公共基类,可以实现上面适配器的所有功能,且可以通过自定义Adapter来定制每个条目的外观和功能,具有较高的灵活性。在实际应用中,对于较为复杂的界面,我们通常直接使用BaseAdapterBaseAdapter与ListView结合使用Android高级UI控件BaseAdapter与ListView结合使用Android高级UI控件修改工程名为“QQDemoV2”新建Activity,QQMessageActivity实现activity_qqmessage.xml实现步骤一Android高级UI控件实现ListView的条目布局,item_qqmessage.xml实现步骤二Android高级UI控件新建实体类QQMessageBean。请问实体类的作用是什么?实现步骤三Android高级UI控件新建适配器类QQMessageAdapter”,继承自BaseAdapter添加成员变量data和contextprivateList<QQMessageBean>data;privateContextcontext;重写相关成员方法实现步骤四Android高级UI控件为QQMessageAdapter添加带参数的构造器方法,初始化data和context。切换到QQMessageActivity.java文件,添加模拟生成消息数据的方法创建适配器对象,并添加到LisetView对象上实现步骤五Android高级UI控件提交课堂作业3.5ListView工作原理Android高级UI控件改写getView方法,利用复用技术优化ListView显示。提交相关代码截图实现步骤六Android高级UI控件Android高级UI控件之二自学GridView控件的相关知识,并实现右图的界面。相关资源在群文档,练习课资源(1)中练习课Android高级UI控件本次课程的要求Android高级UI控件应知:了解Adapter的工作原理;ExpandableListView等控件的使用应会会使用基本的适配器;会使用ExpandableListView显示控件能完成简单Android程序的开发回顾上一节的内容对于联系人这类具有分组的显示要求,我们应该用什么控件呢?回顾与引入Android高级UI控件可扩展下拉列表(ExpandableListView)本质上就是由两个具有主从关系的ListView组成的,所以ListViewAdapter中存在的方法,ExpandableListViewAdapter必定存在,只是需要针对group和child分别重写新增加了两个方法,分别是hasStableIds()和isChildSelectable(intgroupPosition,intchildPosition)ExpandableListViewAndroid高级UI控件hasStableIds():用来判断ExpandableListView内容id是否有效(返回true或者false),系统会跟据id来确定当前显示哪条内容。isChildSelectable(intgroupPosition,intchildPosition):用来判断某个Group中的child是否可选。ExpandableListViewAndroid高级UI控件实现联系人Activity界面activity_qqcontact.xml实现过程之一Android高级UI控件实现ExpandableListView组布局item_contact_group.xml实现过程之二Android高级UI控件实现ExpandableListView子布局item_contact_child.xml实现过程之三Android高级UI控件新建实体类QQContactBean实现过程之四Android高级UI控件privateStringname;privateintimg;privateStringonlinemode;privateStringnewaction;新建适配器类QQContactAdapter,继承自BaseExpandableListAdapter。定义三个成员变量实现过程之五Android高级UI控件privateList<String>groupdata;
privateMap<String,List<QQContactBean>>childdata;
privateContext
context;按下“Alt+Enter”快捷键,自动实现相应的10个抽象方法框架,然后依次实现相关代码为QQContactAdapter添加带参数的构造器方法,初始化groupdata,childdata和context切换到QQContactActivity.java文件,添加成员变量以及模拟生成消息数据的方法initialData()找到ExpandableListView对象,创建并设置适配器,完成显示功能实现过程之六Android高级UI控件Android高级UI控件之三本次课程的要求Android高级UI控件应知:了解Android应用的基本结构;了解Fragment和ViewPager;应会会使用Fragment和ViewPager;会使用AndroidStudio集成开发环境;能完成侧滑效果回顾上一节的内容为了操作方便,我们能不能将多个界面集成到一个Activity中呢?回顾与引入Android高级UI控件Fragment是Android3.0引入的新技术,其目的是为了解决不同屏幕分辩率的动态和灵活UI设计问题。Google将Activity中的UI控件进行分组和模块化管理,大大提高了代码重用性和改善用户体验,而这些分组后的UI控件就是Fragment。一个Activity页面中可以包含多个Fragment模块,而同一个Fragment模块也可以被多个Activity使用。FragmentAndroid高级UI控件ViewPager是Android扩展包v4包中的类,这个类可以让用户左右切换当前的ViewViewPager类直接继承了ViewGroup类,所有它是一个容器类,可以在其中添加其他的View类。ViewPager属于适配器控件,其使用方式与ListView等控件的使用方式一样,需要为ViewPager设置PagerAdapter来完成页面和数据的绑定。
ViewPagerAndroid高级UI控件ViewPager相关适配器Android高级UI控件为了简化程序的编写,Android提供了专门的适配器来让ViewPager与Fragment一起工作。FragmentPagerAdapter:会将每一个生成的Fragment都保存在内存之中,切换速度快,但占用资源较多,适用于所需Fragment数量不多且内容信息变化不大的情况FragmentStatePagerAdapter:每次只保留当前显示的Fragment,当Fragment离开视线后,就会被清除,释放其资源,适用于Fragment数量较多且内容变化较大的情况实现集成主界面activity_main.xml实现过程之一Android高级UI控件新建三个selector文件tab_contact_selector.xmltab_message_selector.xmltab_pulgin_selector.xml修改布局文件activity_main.xml中的rbMessage、rbContact和rbPulgin的drawableTop属性值分别为tab_message_selector、tab_contact_selector和tab_pulgin_selector实现过程之二Android高级UI控件新建QQMessageFragment,继承自android.support.v4.app.Fragment参照QQMessageActivity,改写QQMessageFragment,注意,Activity中onCreate方法中的代码要对应到Fragment中的onCreateView方法中。同理实现QQContactFragment实现过程之三Android高级UI控件新建QQFragmentPagerAdapter,继承自FragmentPagerAdapter重写QQFragmentPagerAdapter中的相关方法。实现过程之四Android高级UI控件切换到MainActivity.java文件,创建QQFragmentPagerAdapter对象,并将其设置到ViewPager中实现过程之五Android高级UI控件vp=(ViewPager)findViewById(R.id.viewPager);
QQFragmentPagerAdapteradapter=newQQFragmentPagerAdapter(getSupportFragmentManager(),
getFragmentsList());
vp.setAdapter(adapter);修改LoginActivity.java的代码,当用户点击“登录”按钮后,跳转到MainActivity窗口。检查滑动功能是否正常,点击相应的单选按钮,是否能切换到相应的界面?如何解决?实现过程之六Android高级UI控件Android高级UI控件之四本次课程的要求Android高级UI控件应知:了解Android应用的基本结构;了解自定义控件的设计过程应会1、会自定义控件;2、会设计自定义的属性;3、能完成圆形头像的功能回顾上一节的内容这里我们用ImageView控件来显示头像,但是方型的头像框不够美观,我们能不能换成其它形状的呢?比如圆形?回顾与引入Android高级UI控件圆形头像如何实现圆形头像Android高级UI控件图像混合圆形头像如何实现图像混合?paint.setXfermode()在AndroidSDK的Paint类中有一个很重要的方法setXfermode,这个方法用于设置图像的混合模式。Xfermode就是图像的混合模式,它有三个子类:AvoidXfermode:已过时PixelXorXfermode:已过时PorterDuffXfermode:该类有一个含参的构造方法PorterDuffXfermode(PorterDuff.Modemode)XfermodeAndroid高级UI控件在AndroidSDK的Paint类中有一个很重要的方法setXfermode,这个方法用于设置图像的混合模式。Xfermode就是图像的混合模式,它有三个子类:AvoidXfermode:已过时PixelXorXfermode:已过时PorterDuffXfermode:该类有一个含参的构造方法PorterDuffXfermode(PorterDuff.Modemode)PorterDuff.ModeAndroid高级UI控件ProterDuff是两个人名的组合:TomasProter和TomDuff.他们是最早在SIGGRAPH上提出图形混合概念的大神级人物PorterDuff.ModeAndroid高级UI控件新建类MyCircleImageView,继承自AppCompatImageView实现构造器方法,注意,这里我们需要在布局文件中使用我们的自定义控件,所以,需要使用带两个参数的构造器方法实现过程之一Android高级UI控件publicMyCircleImageView(Context
context,AttributeSet
attrs){super(context,attrs);}定义所需的成员变量在构造器方法中对相应的成员变量进行初始化实现过程之二Android高级UI控件
privateContextmContext;privateBitmapmask;privatePaintpaint;privateintmBorderWidth=10;privateintmBorderColor=Color.parseColor("#f2f2f2");编写createOvalBitmap方法,用来生成圆形的蒙版完成后,将代码截图发到钉钉中实现过程之三Android高级UI控件编写drawBorder方法,用来绘制头像框的边框完成后,将代码截图发到钉钉中实现过程之四Android高级UI控件重写onDraw方法,实现将原图与圆形蒙版混合,并绘制边框打开布局文件activity_qqmessage.xml,将其中的ImageView替换为MyCircleImageView完成后,界面截图发送到钉钉中实现过程之五Android高级UI控件MyCircleImageView的边框宽度和边框颜色目前都是固定的privateintmBorderWidth=10;privateintmBorderColor=Color.parseColor("#f2f2f2");那么,有没有办法让用户能够像使用Adroid自带的控件一样,用XML给控件设置属性呢?declare-styleable如何为我们的控制定制属性Android高级UI控件在res/valuse/文件夹下创建attrs.xml文件实现过程之六Android高级UI控件<?xmlversion="1.0"encoding="utf-8"?><resources><declare-styleable
name="MyCircleImageAttr"><attrname="border_width"format="dimension"/><attrname="border_color“format="color"/></declare-styleable></resources>
reference:参考某一资源ID,比如图片资源的引用。 color:颜色值,比如字体颜色。 dimension:尺寸值,比如宽度和高度。在布局文件activity_qqmessage.xml中,设置属性实现过程之七Android高级UI控件1:表示我们为属性定义的前缀,类似于“android:”;2为项目的包名;3为自定义属性的设置的值。修改MyCircleImageView.java文件中的构造器方法的相关代码实现过程之八Android高级UI控件TypedArraya=context.obtainStyledAttributes(attrs,R.styleable.MyCircleImageAttr);mBorderColor=a.getColor(R.styleable.MyCircleImageAttr_border_color,Color.parseColor("#f2f2f2"));mBorderWidth=a.getDimensionPixelSize(R.styleable.MyCircleImageAttr_border_width,10);a.recycle();px也就是屏幕上的实际像素dpi-“dotsperinch”的缩写,“每英寸的像素数”,像素密度单位dpdensity-independentpixel,即”密度无关像素”。1dp为160dpi时的一个像素大小spscale-independentpixel,即”独立比例像素”,sp主要用作字体的单位dp、px和spAndroid高级UI控件sp*dpi/160=pxdp*dpi/160=px160dpi320dpi修改计算边框宽度的代码实现过程之九Android高级UI控件TypedArraya=context.obtainStyledAttributes(attrs,R.styleable.MyCircleImageAttr);mBorderColor=a.getColor(R.styleable.MyCircleImageAttr_border_color,Color.parseColor("#f2f2f2"));floatdensity=context.getResources().getDisplayMetrics().density;mBorderWidth=a.getDimensionPixelSize(R.styleable.MyImageViewAttr_border_width,(int)(10*density));a.recycle();完成界面中所有头像框的替换,并上传运行截图和项目代码。课后作业Android高级UI控件Android高级UI控件之五本次课程的要求Android高级UI控件应知:了解Android应用的基本结构;了解菜单和对话框的使用;应会会使用菜单和对话框;会使用AndroidStudio集成开发环境;能完成简单Android程序的开发回顾上一节的内容在应用软件中我们往往要借助菜单和对话框来进行人机交互,那么,在Android中如何创建我们自己的菜单和对话框呢?回顾与引入Android高级UI控件选项菜单上下文菜单菜单的分类Android高级UI控件选项菜单(OptionsMenu):通过Menu按钮调用菜单onCreateOptionsMenu方法:初始化选项菜单,该方法只在第一次显示菜单时调用,如果需要每次显示菜单时更新菜单项,则需要重写onPrepareOptionsMenu方法。返回值必须为true,否则选项菜单不会显示onOptionsItemSelected方法:当选项菜单中某个选项被调用时调用该方法onPrepareOptionsMenu方法:为程序准备选项菜单,每次选项菜单显示前都会调用该方法,可以它修改菜单的内容,返回值必须为true,否则选项菜单不会显示选项菜单Android高级UI控件在strings.xml中添加相应的文字信息在res/menu/文件夹下新建munu_login.xml文件重写LoginActivity中的onCreateOptionsMenu方法实现过程Android高级UI控件上下文菜单(ContextMenu):上下文菜单不同于选项菜单,选项菜单服务于Activity,而向上下文菜单是注册到某个View对象上的,默认情况下用户可以通过长按(约2秒)相应View就可以呼出上下文菜单。onCreateContextMenu方法:创建上下文菜单,每次呼出菜单时调用registerForContextMenu方法:为指定的视图注册上下文菜单onContextItemSelected方法:当上下文菜单中某个选项被调用时调用该方法上下文菜单Android高级UI控件在strings.xml中添加相应的文字信息在res/menu/文件夹下新建munu_message.xml文件重写QQMessageFragment中的onCreateContextMenu方法将上下文菜单关联到ListView控件上实现过程Android高级UI控件重写QQMessageFragment中的onContextItemSelected方法分别定义goTop方法和deleteMsg方法来实现相应的功能这两个方法中的代码有一大部分重复,为什么不直接放在onContextItemSelected方法中?实现上下文菜单的点击功能Android高级UI控件重写QQMessageFragment中的onOptionsItemSelected方法使用AlertDialog实现关于和退出确认功能实现选项菜单的点击功能Android高级UI控件一般对话框列表对话框单选按钮对话框多选按钮对话框自定义对话框对话框Android高级UI控件setTitle方法:为对话框设置标题setIcon方法:为对话框设置图标setMessage方法:为对话框设置内容setView方法
:给对话框设置自定义样式setItems方法
:设置对话框要显示的一个list,一般用于显示几个命令时setMultiChoiceItems方法
:用来设置对话框显示一系列的复选框对话框AlertDialog.BuilderAndroid高级UI控件setNeutralButton方法
:普通按钮setPositiveButton方法
:给对话框添加"Yes"按钮setNegativeButton方法
:对话框添加"No"按钮create方法:创建对话框show方法:显示对话框对话框AlertDialog.BuilderAndroid高级UI控件对话框AlertDialog.BuilderAndroid高级UI控件Android本地存储之一本次课程的要求Android本地存储应知:了解SharedPreferences存储;了解基本SQL语句的使用;应会会使用SharedPreferences存放配置信息;会使用基本SQL语句实现数据库的增删改查;能完成简单Android程序的开发回顾上一章的内容程序代码+数据就构成了我们的软件,那么,在Android中我们是如何存储数据呢?回顾与引入Android本地存储系统配置SharedPreferences文件存储数据库(SQLite)内容提供者(ContentProvider)Android本地存储形式Android本地存储采用键值对的方式存放信息主要用来存放一些简单的配置信息SharedPreferencesAndroid本地存储SharedPreferences写入步骤Android本地存储打开Preference,系统自动判断,如存在就打开,否则创建SharedPreferencessettings=getSharedPreferences("setting",MODE_PRIVATE);使其处于编辑状态SharedPreferences.Editoreditor=settings.edit();存放数据editor.putString(“name”,“sohu”);完成提交mit();SharedPreferences读取步骤Android本地存储打开Preference
SharedPreferencessettings=getSharedPreferences("setting",MODE_PRIVATE);取出数据Stringname=settings.getString(“name”,“”);将QQDemoV2改名为QQDemoV3用户单击“登录”按钮时,如勾选了“记住密码”,则将输入QQ号码和密码记录在SharedPreferences中,然后跳转到MainActivity当用户下次打开应用时,自动填入QQ号码和密码实现过程记住密码功能Android本地存储回顾基本SQL语句Android本地存储安装SQLiteExpertSQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统;主要面向嵌入式系统,占用资源少,通常只需几百K内存;支持主流开发语言,运行速度快。
回顾基本SQL语句Android本地存储以系统登录为例,分析我们应该如何记录数据表设计表QQ_Login查看创建QQ_Login表的SQL语句
回顾基本SQL语句Android本地存储分析联系人界面中联系人显示的信息,看看我们还需要哪些字段?为QQ_Login表添加字段一张表中有成千上万条记录,我们如何唯一确定一条记录呢?主键
回顾基本SQL语句Android本地存储如何往QQ_Login表中添加数据insert语句如何查询表中的数据select语句如何修改指定记录的信息update语句如何删除指定的记录delete语句
回顾基本SQL语句Android本地存储我们已经创建了QQ_Login表,能否支持联系人功能的实现?比如显示刘备的所有联系人?QQ_Login表描述了一个联系人的信息,但并没有描述联系人之间的关系即谁是谁的联系人那如何解决?创建QQ_Contact表
Android本地存储之二本次课程的要求Android本地存储应知:了解SQLite数据库;了解如何使用程序访问SQLite数据库;应会会使用SQLiteOpenHelper创建和管理数据库;能实现登录功能;能完成简单Android程序的开发上一节课我们使用SQL语句在SQLiteExpert中创建和访问了数据库那么在Android程序中,我们该如何访问数据库?回顾与引入Android本地存储SQLiteDatabase用于管理和操作SQLite数据库,几乎所有的数据库操作,最终都将由这个类完成。该类封装了一些操作数据库的API,支持CRUD操作。execSQL():执行insert、delete、update和CREATETABLE之类有更改行为的SQL语句;rawQuery()方法可以执行select语句访问SQLite数据库Android本地存储在Android系统,为我们提供了一个名为SQLiteOpenHelper的类,该类用于对数据库版本进行管理,该类是一个抽象类,必须继承它并实现三个方法:构造器方法:默认情况下需要四个参数:上下文环境(例如,一个Activity)、数据库名字、可选的游标工厂(通常是null)和数据库版本。onCreate方法:在数据库第一次生成的时候会调用这个方法,一般我们在这个方法里边生成数据库表。onUpgrade方法:当数据库需要升级的时候,Android系统会调用这个方法。一般我们在这个方法里边删除数据表,并建立新的数据表。
SQLiteOpenHelperAndroid本地存储SQLiteOpenHelper当调用SQLiteOpenHelper的getWritableDatabase()或者getReadableDatabase()方法获取用于操作数据库的SQLiteDatabase实例的时候,如果数据库不存在,Android系统会自动生成一个数据库。onCreate()方法,onCreate()方法在初次生成数据库时才会被调用,在onCreate()方法里可以生成数据库表结构及添加一些应用使用到的初始化数据onUpgrade()方法在数据库的版本发生变化时会被调用。比如版本由1变为2。
Android本地存储新建MyDbHelper,继承自SQLiteOpenHelper,并重写相关方法切换到LoginActivity.java中,修改onCreate()方法中,登录按钮的监听器处理代码,实现本地数据库验证功能当登录成功后,更新联系人界面上的登陆用户头像实现过程登录功能Android本地存储Android本地存储之三本次课程的要求Android本地存储应知:了解SQLite数据库的使用;了解如何使用程序访问SQLite数据库;应会会使用DialogFragment创建对话框;能实现联系人显示、添加和删除功能;能完成简单Android程序的开发。上一节课我们学习了如何在Androi的中访问数据库,并实现了登录功能在本次课程中我们将实现联系人界面的显示、删除和添加功能?回顾与引入Android本地存储登录后,联系人界面应该显示系统中所有的用户吗?登录用户的联系人如何记录每个用户相关的联系人?新建一张表QQ_Contact联系人界面中同样需要QQ_Login表中的信息,需要在QQ_Contact表中重复记录吗?为什么?多表的连接针对联系人修改数据库设计Android本地存储在SqliteExpert中创建QQ_Contact表和view_Contact视图;根据SQLiteExert中自动生成的创建QQ_Contact表和view_Contact视图的SQL语句,在MyDbHelper.java文件,修改onCreate()和initData()方法中的相关代码;在模拟器中删除已创建的数据库修改QQContactFragment.java文件中的initData()方法,实现从数据库中读取登录用户的联系人信息
使用SQLite实现联系人信息显示Android本地存储为ExpandableList添加上下文菜单实现数据库删除操作实现同步刷新功能实现过程删除联系人功能Android本地存储新建布局文件,实现对话框界面自定义对话框继承自DialogFragment实现数据库添加操作仿照监听器模式,实现同步刷新实现过程添加联系人功能Android本地存储Android本地存储之四本次课程的要求Android本地存储应知:了解ContentProvider;了解自定义ContentProvider的步骤;应会会使用ContentProvider公开数据;能够通过ContentProvider管理数据;能完成简单Android程序的开发上一节课我们学习了如何在Android的中访问数据库,并实现了联系人界面的显示、删除和添加功能在本次课程中我们在QQ联系人中加入本机联系人的组回顾与引入Android本地存储ContentProvider是Android四大组件之一,主要用来实现应用程序之间的数据共享应用程序A通过ContentProvider将自己的数据暴露出来,其它应用通过ContentResolver来对应用A暴露出来的数据进行增删改查操作ContentProvider及其工作过程Android本地存储任意一个应用,都可以借助ContentProvider将数据共享出来;如何为每个ContentProvider设置唯一标识
如何标识ContentProviderAndroid本地存储所有ContentProvider的Uri必须以content://开头Authority由开发者自己定义,用来唯一标示一个ContentProviderPath表示要操作的数据集,类似于数据库中的表Id:用以区别表中的不同数据
如何标识ContentProviderAndroid本地存储content://contacts/peoplecontent://com.android.contacts/people/10创建工程,命名为Ex04_contentprovider新建一个数据库辅助类DbHelper,创建数据库名叫test.db,包含一张名为users的表新建一个类名为MyContentProvider,继承自ContentProvider,分别重写其中的onCreate()、query()、insert()、delete()、update()和getType()方法在AndroidMinifest.xml中声明该Provider实现过程自定义ContentProviderAndroid本地存储新建工程Ex04_contentproviderTest实现Activity布局及ListView的行布局新建MyAdapter继承自BaseAdapter,并重写相关方法实现通过ContentProvider获取、添加、删除和修改数据实现过程访问ContentProviderAndroid本地存储将联系人头像存放在手机外部存储中实现过程集成本机联系人信息Android本地存储将QQ_Login表中[qq_img]INT改为[qq_imgurl]VARCHAR,并相应修改数据初始化代码修改ContactBean.java代码,删除privateintimg成员变量,添加privateStringimgurl成员变量,然后相应修改代码通过访问系统提供的ContentProvider,实现显示本机联系人功能修改QQContactAdapter中图片显示代码设置读取联系人权限(AndroidManifest及动态授权)
实现过程集成本机联系人信息Android本地存储服务与广播之一本次课程的要求应知:了解简单播放器的基本功能要求;了解本章所需的知识点;应会能够综合使用UI界面设计的相关知识,完成播放器的框架搭建;能够完成程序的调试及错误排除。服务与广播前面的课程中,我们学习了UI控件的使用及界面布局、数据存储、网络通信等知识在本章中我们将综合使用相关知识,实现一个较为综合的项目回顾与引入服务与广播歌曲文件的搜索:使用MediaStore类搜索手机上SDCard中所有的音频文件。歌曲的播放控制:点击播放界面中的“播放/暂停”按钮可启动播放和暂停功能。点击“上一首/下一首”按钮,可在音乐列表中进行上一首、下一首的切换;拖动拖动条上的滑块可改变当前歌曲的播放进度。歌曲列表:进入歌曲列表界面,程序以列表的形式显示所有的歌曲,单击相应的歌曲可实现播放。主要功能服务与广播歌曲信息的显示:当打开播放界面时,程序会自动显示当前歌曲的名称、专辑封面(如果有的话),以及歌曲的长度和当前播放位置。歌词的同步显示:当歌曲文件所在的目录下存在同名的歌词文件(.lrc)时,程序会自动解析歌词文件,并随着歌曲的播放同步显示歌词。后台播放功能:当关闭程序时,不影响歌曲的播放;重新打开程序后,会自动回到正在播放的歌曲界面。主要功能服务与广播任务1简单音乐播放器框架的搭建服务与广播服务与广播之二本次课程的要求应知:了解MediaPlayer的相关知识;了解ContentProvider的相关知识;应会能够使用ContentProvider实现歌曲列表的显示;能够使用MediaPlayer实现歌曲的播放、暂停等基本功能;能够完成程序的调试及错误排除。服务与广播任务2实现播放功能服务与广播任务2实现播放功能服务与广播MediaPlayer状态转换图MediaPlayer类可用于控制音频/视频文件或流的播放任务2实现播放功能服务与广播MediaStore这个类是Android系统提供的一个多媒体数据库;Android把所有的多媒体数据接口都通过ContentProvider进行了封装,这样用户可以直接通过ContentResolver去调用那些已经封装好的接口,来对数据库进行操作;外部存储:MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI内部存储:MediaStore.Audio.Albums.INTERNAL_CONTENT_URI”。服务与广播之三本次课程的要求应知:了解Service的基本概念及工作
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 年会策划范文集锦6篇
- 大学生实习报告范文锦集5篇
- 金融专业学生自我鉴定6篇
- 背手上铐的课件
- 建设监理合同(合集15篇)
- 2022大学生三下乡社会实践服务报告范文8篇
- 企业年终个人工作总结2021年
- 反心灵鸡汤课件
- 学校感恩节策划方案
- 节约粮食主题演讲稿
- 5.2《大学之道》课件+2024-2025学年统编版高中语文选择性必修上册
- 案例2-5 节能效果对比讲解
- 荆楚民艺智慧树知到期末考试答案章节答案2024年湖北第二师范学院
- SH/T 3065-2024 石油化工管式炉急弯弯管工程技术规范(正式版)
- 穿脱隔离衣的流程及注意事项
- GB/T 43878-2024旋挖钻机截齿
- 四年级语文上册期末试卷(下载)
- 拼多多营销总结报告
- 手术室护士交接流程
- 中式面点技艺智慧树知到期末考试答案2024年
- 干槽症的治疗方案
评论
0/150
提交评论