疯狂安卓Android自学笔记
开发者必备自学工具:
谷歌搜索:www.yundou.info
Android原版开发文档 (英文) Doc http://www.phoned.cn/docs/reference/android/view/View.html
Android原版开发文档 (英文) Doc 下载地址 http://www.phoned.cn/docs.zip 由于谷歌被封杀网页相关谷歌API无法调用打开会非常卡建议断网或FQ后使用。
2015-12-24
View 组件:
绝大多数的android基础控件都存在包android.widget,android.view 及其子包中。
所有的UI基础组件都继承了View类,view是一个空白的panel 板。
ViewGroup 具有view的功能,通常用作view的容器,而其又是抽象类,为了减少方法复写通常使用ViewGroup的子类作为容器。
ViewGroup通过它自身的内部类LayoutParams,MarginLayoutParams的XML方法来控制放在其容器内部的组件布局。
开发者可以通过继承View类并实现其方法,自定义个性化的UI组件。通常重写View构造函数这种基本的方式实现。
继承自View的类重写其方法,该类生成的对象将按照重写的方法来生成相应的形状或者效果。
如果使用R引用控件或文件时无法找到已经创建的控件时,查看引入的R文件是否是当前包的R文件。
//////////////////////////////////////////////////////////////////////////////////////////////////////
2015年12月25日
再探布局:
LinearLayout 流式布局,组件可按照横向或纵向先后顺序排列,组件之间会相互推挤,由于屏幕大小有限,有时有的控件会推挤到屏幕外而无法看到该控件。
GridView网格布局,指定行列后添加View控件、。
TableLayout 表格布局,无需事先指定行列,添加行数后,在行控件中添加子控件。
FrameLayout 帧布局,各个控件会按照加载顺序会叠加在一起。
RelativeLayout 关系布局,各个控件的位置由其他控件的位置作为参考来摆放。
AbsoluteLayout 绝对布局,控件的位置由开发者自己决定,严格的按照x,y坐标来摆放控件。
//////////////////////////////////////////////////////////////////////////////////////////////////////
2015年12月26日
深入Activity
众多的Activity组成Activity栈,当前活动的Activity处于栈顶。
通过继承关系图可知:Activity间接的继承了context,contextwrapper,contextthemewrapper等基类。
什么是回调:在特定时刻会发生的调用行为,例如回调函数。A调用B去处理相关事务,B在处理事务时需要A提供一个处理事务的函数C,C则称为回调函数,为什么A不直接去处理而让B去处理,在处理过程中B可能不只是处理A的事务,还处理其它类型的事务,在处理各种类型的事务的过程中底层某些实现逻辑是一致的,所以封装了B,减少了冗余的底层实现代码,对于一个具有通用性质的程序架构来说,程序完成整个应用的通用功能,流程,但是在特定的点上,需要执行开发者自定义的与软件业务相关的代码,这段代码”因人而异”而通用程序构架无法完成这段代码。
程序内部逻辑执行完成后需要调用该段由开发者自定义的函数或代码来实现特定的功能,通常有两种方式完成这段功能代码的编写:一种是以接口的新式,复写其回调方法以嵌入自己的代码。另一种是通过继承基类的抽象或非抽象的类方法,复写其抽象或非抽象类方法完成代码嵌入。
//////////////////////////////////////////////////////////////////////////////////////////////////////2015年12月27日
理解intent相关
Android使用同一的intent模型来封装模块间的启动,为各个模块组件提供了统一的编程模型。
ComponentName(A1,A2);A
参数A1代表A1所对应的包,A1可以是String、Context。
参数A2代表组件,A2可以是String、class。
Intent属性 action和category是一个设置静态字符串的方法,action方法代表intent需要完成的行为(打开,查看等),category方法为action提供附加信息。
Intent设置了category和action结合的方法后只是定义了intent的行为和该行为附加信息,并没有指定执行这一行为的对象,通过intent-filter来控制执行对象,在Manifest中配置Activity的Intent-filter,该Activity就有可能被启动。
通过intent-filter来指定动作的执行者,从而切断了行为与执行者之间的粘合,行为和执行者之间是可插拔的关系,如此设计降低程序的耦合度。
//////////////////////////////////////////////////////////////////////////////////////////////////////
2015年12月29日(补一章)
Android资源操作
Android目录下的res目录中存放的资源会自动在R文件中生成索引,在代码中可以直接引用。Assets也是存放资源的目录,存放的是android无法直接访问的原生资源,需要使用AssetsManager已二进制流读取。
在XML代码中使用@符号引用的标识符号除了系统定义的资源名称还外可以在XML资源文件中使用name标签自定义资源名称。
尺寸,颜色,字符串资源,定义在res下的value文件夹中,使用@符号引用资源时格式为例如:@string/title即引用了value下的string文件下name为title的item的值。
XML资源中的数组,在XML根标签<resource>下定义的三种数组形式:<array>普通型<string-array>字符串型<integer-array>整形数组。
根标签<layer-list>是LayerDrawable的XML声明格式,其内部包含的是Drawable对象(drawable=XXX),可以包含多个Drawable。绘制顺序根据索引大小依次绘制。
五大资源特效控件 StateListDrawable, LayerDrawable, ShapeDrawabe, ClipDrawable, AnimationDrawable。
StateListDrawable 根标签<seloctor>设置控件事件发生变化时起作用。
LayerDrawable 根标签<Layer>根据Drawable对象绘制图形。
ShapeDrawable 根标签<Shape>设置控件视觉效果,例如 圆角,填充,边线,渐变。
ClipDrawable 根标签<Clip>截取图片特定位置的片段。
AnimationDrawable 根标签<set>设置一个动画资源。
原始XML:保存一些初始化参数或者小量的配置信息,大量信息可以考录使用SQLite。
要求:是一份语法符合XML规范的文件。
通过XML解析类XmlResourceParser的方法getXml(int id)获取XmlPullParser对象来进行XML相关操作。
使用InputStream类的方法openRawResource方法可获取XML输入流。
菜单资源./res/menu 根标签<menu>通过设置其内嵌的元素项来设置菜单的内容。
通过重写上下文菜单方法onCreateContextMenu可以将菜单资源文件载入作为一个上下文菜单,也可以用于其他地方,手法类似。
Android中定义theme主题资源。
控件风格控制:根标签<resource>通过子标签<style>添加属性。子标签<style>可通过name指定样式名称,parent指定继承项。
Activity主题控制:Activity主题XML格式类似风格控制的写法,item项多采用系统函数android:WindowXXX书写的形式。
通过activity的setTheme方法可为单个activity设置主题,统一设置主题可在manifest中设置。
Attribute属性资源,根标签<resource>,attr为子元素,declare-styleable为属性的集合。
代码中通过AttributeSet方法获取属性。
Attribute对对象的属性进行托管,规范化对象属性。
使用属性时通过在项目XML布局中导入attribute所在的包。命名空间:xmlns:xxx.android.com/apk/res/packge
Android程序国际化的主要类:ResourceBundle,locale,翻译文件以KEY-VAR键值对形式存放,通过native2veascii将其转化为Unicode格式。
Android程序国际化也可以通过res下建立不同语言命名的文件夹(value-zh-rCN)的String.xml键值对(<string name=”ok”>好</string>)来实现。、
//////////////////////////////////////////////////////////////////////////////////////////////////////
图形与图像处理(主要靠动手)
Bitmap代表一张位图,BitmapDrawable封装了Bitmap对象。
访问android程序自身以外的路径中的图像需要需要使用BitmapFactory来解析创建bitmap对象。
创建bitmap对象往往需要占用设备内存,bitmap对象方法isRecycle()方法判断是否已经回收recycle()方法则强制回收。
继承view组件重写onDraw方法即可实现绘画。
Canvas代表画布,paint代表画笔。使用它们各自的方法可以实现绘画不同效果。
Path代表任意多条子线链接而成的任意图形。它可以预先在view上将N个点链接成一条路径,然后使用canvas的drawPath方法沿路径绘制图形。
PathEffect定义绘制的效果。
Matrix是android提供的一个矩阵工具类,结合其它API来控制图形组件的变换。
//////////////////////////////////////////////////////////////////////////////////////////////////////
2016年1月1日(补两章)
Android数据存储于IO流
SharedPreferences 接口以键值对的形式:用于保存少量信息,例如配置信息,软件相关外存。
SharedPreferences提供了一系列对外存文件的读写操作。
SharedPreferences内部接口Editor提供了数据的写入和清除方法。
SharedPreferences本身是一个接口,无法使用new方法生成其对象,强行使用new方法生成其对象则会写成内部类形式。使用context.getSharedPreferences();获取对象。
Context提供了一组读取当前应用程序的数据文件夹下文件的IO文件流:openFileInput openFileOutput。
读写SD卡文件:Environment getExternalStorageState();判断SD卡状态。
GetExternalStorageDirectory()获取SD卡目录。
使用FileInputStream FileOutputStream FileReader FileWriter方法对文件进行读写。
后记:学习至此只看书然而并没有什么卵用,光领会内容是不够的,工科资料需要边领会边实战,还有如果不能坚持的话前面干得再多也将会很快忘记。2016年1月2日