原文:Android零基础入门第50节:StackView卡片堆叠 上一期学习了AdapterViewFilpper的使用,你已经掌握了吗?本期开始学习StackView的使用. 一.认识StackView StackView也是AdapterView Animator的子类,它也用于显示Adapter提供的一系列View. StackView将会以堆叠(Stack)的方式来显示多个列表项. 为了控制StackView显示的View组件,StackView提供了如下两种控制方式. 拖走Stack…
原文:Android零基础入门第58节:数值选择器NumberPicker 上一期学习了日期选择器DatePicker和时间选择器TimePicker,是不是感觉非常简单,本期继续来学习数值选择器NumberPicker . 一.NumberPicker概述 NumberPicker 是用于选择一组预定义好数字的组件,用户既可以通过键盘输入数值,也可以通过滚动来选择数值. NumberPicker的常用方法如下: setMinValue(int minVal):设置该组件支持的最小值. setM…
原文:Android零基础入门第59节:AnalogClock.DigitalClock和TextClock时钟组件 在前面一期,我们学习了DatePicker和TimePicker,在实际开发中其不能完全满足我们对时间和日期的处理. 如果只是想要显示时间,而不需要用户修改,就可以使用DigitalClock和AnalogClock时钟组件,这2个组件非常有用,使用起来也非常简单,其值可以随时间自动更新. 一.AnalogClock 首先来一起学习AnalogClock组件.AnalogCloc…
原文:Android零基础入门第57节:日期选择器DatePicker和时间选择器TimePicker 在实际开发中,经常会遇见一些时间选择器.日期选择器.数字选择器等需求,那么从本期开始来学习Android中常用选择器,今天学习的是DatePicker和TimePicker. 一.DatePicker DatePicker是一个比较简单的组件,从FrameLayout派生而来,供用户选择日期.其在FrameLayout的基础上提供了一些方法来获取当前用户所选择的日期,如果程序需要获取用户选择的…
原文:Android零基础入门第56节:翻转视图ViewFlipper打造引导页和轮播图 前面两期学习了 ViewAnimator及其子类ViewSwitcher的使用,以及ViewSwitcher的子类ImageSwitcher和TextSwitcher的使用,你都掌握了吗?本期我们一起来学习ViewAnimator另一个子类 ViewFlipper组件的使用. 一.ViewFlipper概述 ViewFlipper组件继承了 ViewAnimator,它可调用addView(View v)添…
原文:Android零基础入门第55节:ImageSwitcher和TextSwitcher使用 上一期我们了解了ViewAnimator组件和ViewSwitcher组件的使用,你都掌握了吗?本期一起来学习ViewSwitcher的两个子组件ImageSwitcher和TextSwitcher. 一.ImageSwitcher ImageSwitcher和ImageSwitcher继承了 ViewSwitcher,因此它具有与ViewSwitcher相同的特征:可以在切换View组件时使用动画…
原文:Android零基础入门第54节:视图切换组件ViewSwitcher 前面三期学习了ProgressBar系列组件,那本期开始一起来学习ViewAnimator组件. 一.ViewAnimator组件概述 ViewAnimator是一个基类,它继承了 FrameLayout,因此它表现出FrameLayout的特征,可以将多个View组件叠在一起. ViewAnimator额外增加的功能正如它的名字所暗示的一样,ViewAnimator可以在View切换时表现出动画效果. ViewAni…
原文:Android零基础入门第53节:拖动条SeekBar和星级评分条RatingBar 前面两期都在学习ProgressBar的使用,关于自定义ProgressBar的内容后期会继续学习的,本期先来学习ProgressBar的2个子组件SeekBar和RatingBar. 一.SeekBar 拖动条和进度条非常相似,只是进度条采用颜色填充来表明进度完成的程度,而拖动条则通过滑块的位置来标识数值--而且拖动条允许用户拖动滑块来改变值,因此拖动条通常用于对系统的某种数值进行调节,比如调节音量等.…
原文:Android零基础入门第52节:自定义酷炫进度条 Android系统默认的ProgressBar往往都不能满足实际开发需要,一般都会开发者自定义ProgressBar. 在Android开发中,自定义ProgressBar一般有三种思路来完成. 一.在系统进度条基础上优化 首先来看一下style="@android:style/Widget.ProgressBar.Horizontal"的源码.鼠标移动到style属性值上,按住Ctrl键,鼠标左键点击即可打开对应资源文件. 当…
原文:Android零基础入门第51节:进度条ProgressBar 不知不觉这已经是第51期了,在前面50期我们学了Android开发中使用频率非常高的一些UI组件,当然这些组件还不足够完成所有APP的开发,还会经常用到一些诸如进度条.拖动条.搜索框.时间和日期选择器等组件,那么后面几期就来一起学习这些高级组件. 一.ProgressBar系列组件 ProgressBar也是一组重要的组件,ProgressBar本身代表了进度条组件,它还派生了两个常用的组件:SeekBar和RatingBar…
原文:Android零基础入门第64节:揭开RecyclerView庐山真面目 大家还记得之前在第38期~第50期都在学习列表控件吗,其中用了8期讲ListView的使用,相信都已经掌握好了吧.那么本期一起来学习Android 5.X新增的一个列表组件,那就是RecyclerView的使用. 一.RecyclerView概述 从前面的学习我们知道,ListView的功能非常强大,几乎绝大部分应用程序都会使用到,虽然也学会一些方法技巧来提升ListView的效率,但其性能还是不是很完美. 另外Li…
原文:Android零基础入门第63节:过时但仍值得学习的选项卡TabHost 由于前几天参加一个学习培训活动,几乎每天都要从早晨7点到晚上一两点,没有什么时间来分享,实在抱歉中间断更了几天.从今天开始恢复分享,更多精彩敬请期待. 今天来了解一个过时的组件,了解的目的不是学会用起来开发,而是了解这种界面的设计和其特点,后期可以用其他方式来替代. 一.TabHost概述 TabHost是一种非常实用的组件,TabHost可以很方便地在窗口上放置多个标签页,每个标签页相当于获得了一个与外部容器相同大…
原文:Android零基础入门第62节:搜索框组件SearchView 一.SearchView概述 SearchView是搜索框组件,它可以让用户在文本框内输入文字,并允许通过监听器监控用户输入,当用户输入完成后提交搜索时,也可通过监听器执行实际的搜索. SearchView默认是展示一个search的icon,点击icon展开搜索框,也可以自己设定图标.用SearchView时可指定如下表所示的常见XML属性及相关方法. 如果为SearchView增加一个配套的ListView,则可以为Se…
原文:Android零基础入门第61节:滚动视图ScrollView 前面几期学习了ProgressBar系列组件.ViewAnimator系列组件.Picker系列组件和时间日期系列组件,接下来几期继续来学习常见的其他组件. 一.ScrollView概述 从前面的学习有的同学可能已经发现,当拥有很多内容时屏幕显示不完,显示不全的部分完全看不见.但是在实际项目里面,很多内容都不止一个屏幕宽度或高度,那怎么办呢?那就需要本节学习的ScrollView来完成. 在默认情况下,ScrollView只是…
原文:Android零基础入门第60节:日历视图CalendarView和定时器Chronometer 上一期学习了AnalogClock.DigitalClock和TextClock时钟组件,本期继续来学习日历视图CalendarView和定时器Chronometer. 一.CalendarView 日历视图(CalendarView)可用于显示和选择日期,用户既可选择一个日期,也可通过触 摸来滚动日历.如果希望监控该组件的日期改变,则可调用CalendarView的 setOnDateCha…
在上一期分享的文章末尾留了一个课后作业,有去思考如何解决吗?如果已经会了那么恭喜你,如果还不会也没关系,本期一起来学习. 一.回退栈 在前面两期的示例中,当我们完成一些操作后,如果想要回到操作之前的状态,一般我们都会按返回键,如下图所示: 然而发现并没有按照我们想要的那样进行,反而退出了程序,那应该怎么得到想要的效果呢? 我们知道Activity有任务栈,用户通过startActivity将Activity加入栈,点击返回按钮将Activity出栈.Fragment也有类似的栈,称为回退栈(Ba…
在上一期我们学习了FragmentManager和FragmentTransaction的作用,并用案例学习了Fragment的添加.移除和替换,本期一起来学习Fragment显示和隐藏.绑定和解绑. 一.Fragment显示和隐藏 由于上一期有简单介绍过对应的api,这里直接通过案例来进行学习. 创建一个新的module名为fragmentshowhide,然后创建一个Fragment对应的布局文件fragment_demo.xml,代码如下: <?xml version="1.0&qu…
前面一起学习了Fragment的创建和加载,以及其生命周期方法,那么接下来进一步来学习Fragment的具体使用,本期先来学习Fragment添加.删除.替换. 一.概述 在前面的学习中,特别是动态加载的时候,有提到FragmentManager和FragmentTransaction类,这里先来详细了解一下其到底为何物. 1.FragmentManager 要管理Activity中的Fragments,就需要使用FragmentManager类.通过getFragmentManager()或g…
一个Activity可以同时组合多个Fragment,一个Fragment也可被多个Activity 复用.Fragment可以响应自己的输入事件,并拥有自己的生命周期,但它们的生命周期直接被其所属的Activity的生命周期控制. 一.Fragment状态 与Activity类似的是,Fragment也存在如下4种状态: 运行状态:当前Fmgment位于前台,用户可见,可以获得焦点. 暂停状态:其他Activity位于前台,该Fragment依然可见,只是不能获得焦点. 停止状态:该Fragm…
Fragment创建完成后并不能单独使用,还需要将Fragment加载到Activity中,在Activity中添加Fragment的方式有两种:静态加载和动态加载,接下来分别进行学习. 一.静态加载 静态加载Fragment非常简单,直接把Fragment当成普通的控件写在Activity的布局文件中.使用<fragment></fragment>标签,该标签与其他控件的标签类似,但必须要指定android:name属性或class属性,其属性值为Fragment的全路径名称.…
随着大众生活水平的提高,再加上移动互联网的迅速发展,几乎每个人都至少拥有一台搭载Android系统的移动设备.Android设备的多样性给我们带来了很大的便捷,各Android设备拥有不同分辨率和不同屏幕大小,特别是平板电脑和手机间的差别巨大,使得同样的界面在不同的设备上显示出不同的效果.为了能够同时兼顾到手机和平板电脑的开发,自Android 3.0版本开始引入了碎片的概念,也就是Fragment. Fragment作为Android最基本.最重要的基础概念之一,在开发中经常会用到,本章我们一…
在Activity间传递的数据一般比较简单,但是有时候实际开发中也会传一些比较复杂的数据,本节一起来学习更多Activity间数据的传递. 一.常用数据类型 在前面几节我们只学习了一些常用类型的数据传递,主要是以下这些重载方法: putExtra(String name, boolean value) putExtra(String name, byte value) putExtra(String name, char value) putExtra(String name, short va…
上一节学习了将简单的数据从MainActivity传递到SecondActivity,本节一起来学习数据如何从SecondActivity回传到MainActivity. 一.简介 前面己经提到,Activity 还提供了一个 startActivityForResult(Intent intent, int requestCode) 方法来启动其他Activity.该方法用于启动指定Activity,而且期望获取指定Activity返回的结果.这种请求对于实际应用也是很常见的,例如应用程序第一…
在Android开发中,经常要在Activity之间传递数据.前面也学习了Activity和Intent相关基础,接下来一起来学习Activity的数据传递. 一.简介 通过前面的学习知道,Intent可以用来开启Activity,同样它也可以用来在Activity之间传递数据.Intent提供了多个重载的方法来携带额外的数据,如下所示. putExtra(String name,  xxx value):向 Intent 中按 key-value 对的形式存入数据. getXxxExtra(S…
上一期学习了Intent的前三个属性,本期接着学习其余四个属性,以及Android系统常用内置组件的启动. 四.Data和Type属性 Data属性通常用于向Action属性提供操作的数据.Data属性接受一个Uri对象,一个Uri 对象通常通过如下形式的字符串来表示: content://com.android.contacts/contacts/1 tel:123 Uri字符串总满足如下格式: scheme://host:port/path 例如上面给出的 content://com.and…
Android应用将会根据Intent来启动指定组件,至于到底启动哪个组件,则取决于Intent的各属性.本期将详细介绍Intent的各属性值,以及 Android如何根据不同属性值来启动相应的组件. Intent 对象大致包含 Component.Action.Category.Data.Type.Extra 和 Flag 这 7 种属性,其中Component用于明确指定需要启动的目标组件,而Extra则用于携带需要交换的数据. 一.Component属性 Intent 的 Componen…
前面学习Activity时己经多次使用了 Intent,当一个Activity需要启动另一个Activity时, 程序并没有直接告诉系统要启动哪个Activity,而是通过Intent来表达自己的意图:需要启动哪个Activity. Intent不仅是封装Android应用程序需要启动某个组件的“意图”,还是应用程序组件之间通信的重要媒介.本节开始来学习Intent的使用. 一.Intent介绍 Intent最常见的用途是绑定应用程序组件,并在应用程序之间进行通信.尽管 Intent 可以通过多…
通过前面的学习,Activity的基本使用都已掌握,接下来一起来学习更高级的一些内容. Android采用任务栈(Task)的方式来管理Activity的实例.当启动一个应用时,Android就会为之创建一个任务桟.先启动的Activity压在栈底,后启动的Activity放在找顶,通过启动模式可以控制Activity在任务栈中的加载情况.本节将针对Activity的任务栈和启动模式进行详细的讲解. 一.Activity任务栈 在开发Android应用时,经常会涉及一些消耗大量系统内存的情况,例…
在前面几期学习了Activity的创建.配置.启动和停止,还学了Activity的生命周期,本期一起来学习Activity有关的更多事儿. 一.数据保存 通过上一期 LogCat 窗口打印的日志可以看出,当 Activity失去焦点时,首先必然会执行onPause()方法,因此当项目中需要保存数据时,可以在onPause()方法中保存.同时,当两个Activity跳转时, MainActivity会先失去焦点让SecondActivity得到焦点,等到SecondActivity完全显示在前台时…
前面两期我们学习了Activity的创建和注册.以及启动和关闭,也学会了重写onCraete方法,这些知识在实际开发中远远不够,还需要学习了解更多. 生命周期就是一个对象从创建到销毁的过程,每一个对象都有自己的生命周期.同样, Activity也具有相应的生命周期. 一.Activity状态 一个Android应用程序往往包含多个Activity,当Activity处于Android应用中运行时,每个Activity的状态都不一样.Activity的活动状态由Android以Activity栈的…