Android学习笔记
androiddev:lookslikehtmldev
基本开发套路:
获得组件findXXXById(R.id.XXX)
添加事件addXXXListener()
常用事件:click,longClick,touch,key,focus
一个重要问题:主线程即UI线程不能阻塞,会带来糟糕的用户体验,并且会使系统弹出警告。
方案一,将耗时任务放入新线程。
缺点:如果需要在新线程中修改view的属性,需要调用view.post(),而不能直接调用,否则会报错。并且这种方法会带来很多冗余代码,不好维护。
方案二,创建SyncTask,实现任务方法和回调方法。
context:两种上下文,就像web开发中request,session,application
ActivityContext,整个activity周期,时间短
ApplicationContext,整个应用周期,时间长
弹出框:
Toast=Alert
通知:
NotificationCompat:创建一个notify对象,可以定义:Title,Content,Ticker,Icon
NotificationManager:弹出一个notify对象
资源管理:
常用res,不常用asset
三种引用res的方式:
代码:
Resourcer=context.getResources()
R.资源类型.资源名称
XML:
@[包名称:]资源类型/资源名称
资源结构:
res/
drawable:图片
menu:菜单
xml:
values/
dimens:尺寸
string:字符串
color:颜色
组件:
view:widget一般组件
viewgroup:layout组件容器
组件分类:
1,基础:TextView,EditText,Button
2,选择:TimerPicker,DatePicker
3,列表:ListView,Spinner
4,显示图片:Gallery,ImageSwitcher
5,菜单:
6,其他:AnalogClock和DigitalClock
组件大小属性:
相对设置:
layout_width
layout_height
可选值:
wrap_content包裹内容,即随着内容增大或减小
fill_parent填满父容器,一旦设定,其他大小属性就不起作用
绝对设置:
宽度:
大小:width,maxWidth,minWidth
字符个数:ems,maxEms,minEms,MaxLenght
singleLine单行,显示不下会显示省略号
高度:
大小:height,maxHeight,minHeight
字符行数:lines,maxLines,minLines
行间距:lineSpacingExtra
组件字体
颜色:textColor
文字大小:textSize单位sp
文本位置:gravity如center
常用组件:
ImageView:图片
srcdrawable中的资源
按钮:
Button
ImageButtonsrc
ToggleButtontextOn,textOff
Radio:
RadioGrouponCheckedChangeListener
RadioButtontext,tag常用来展示,数据的存储
Checkbox:
CheckBoxonCheckedChangeListener
Spiner:下拉列表
entries下拉数组
spinnerMode模式,dialoge,dropdown
可添加adapter作为数据,extendsBaseAdapter重点实现getCount(),getView()
选中事件:setOnItemSelectedListner()
AlertDialog:弹出框
Builder
title,message,
三按钮:positiveButton,negativeButton,NeturalButton
选项:items
单选:singleChoiceItem
多选:mutiChoiceItem
自定义:view使用viewinflator
布局
线性布局:table布局
LinearLayout
orientation=verticalorhorizontal
gravity=center
weight按比重,在子组件中设置
代码动态生成布局:
1,纯代码,很少用
2,通过LayoutInflator加载可重用xmllayout
Viewv=getLayoutInflator().inflate(R.layout.xxx,null);
this.layout.addView(v);
相对布局:div+css
RelativeLayout
位置:layout_above/below/toLeftOf/toRightOf
偏移:layot_marginTop/Buttom/Left/Right
对齐:layout_alignXXX
帧布局:
FrameLayout
表格布局
TableLayout
滚动条布局
ScrollView
ListView
BaseAdapter灵活
ArrayAdapter 简单
SimpleAdapter 简单
SimpleCursorAdapter 数据库
divider,dividerHeight 分割线颜色和厚度
headView,footView 头部和尾部自定义
GridView:网格
adapter
column列
Gallery:画廊
adapter
onItemSelected 点击
GalleryParam宽高
DatePicker:日期选择
init默认值,选择后的回调函数
calanderViewShow默认会显示日期选择框
TimePicker:时间选择
setIs24HoursView24小时制
XXXDialog:弹出框式日期时间选择
ProgressBar:进度条
默认是圆圈,长条形需要设置style="@android:style/Widget.ProgressBar.horizontal"
ProgressDialog
异步处理方式
Handler要在主线程中声明,耗时任务在新线程中执行,执行后,调用Handler的sendMessage可以发消息,通知CallBack;
CallBack中实现handleMessage可以处理消息,完成控件更新;
Activity
->Windows
->XXXLayout
->Component
name,label
推荐使用wizard生成
跳转
Intentintent=newintent();
intent.setClass(this,SecondActivity.class);
startActivity(intent)
Android的返回按钮,会回退Activity
传值:
intent.putExtra();
拿值:
Intentintent=this.getIntent()
intent.getStringExtra();
setContentView(R.layout.myactivity)只是重绘,不会进activity栈
相互传递数据
原Activity调用startActivityForResult()跳转
后Activity调用setResult()返回数据
原Activity重写onActivityResult()接收数据
疯狂Android笔记:
第一章
发展和历史
历史讲解很有趣,多点图片,增加熟悉感
//框架特性对于初学者不友好
搭建开发环境
//常用开发工具的用法对于初学者不友好
第一个程序的简单讲解还可以
Activity,layout
结构分析没有必要手动创建
R与res
AndroidManifest.xml
基本组件的介绍还可以
//签名对初学者不友好
第二章
要点太多了吧
属性完全没有分类讲解,看完就忘
容器
ViewGroup
控制子组件:ViewGroup.LayoutParams,ViewGroup.MarginLayoutParams
layout_height,layout_width:fill_parent/match_parent,wrap_content
组件的大小由自己的大小和上面的布局大小控制,推荐使用布局大小控制,这样就会使界面有平台无关性
完全代码控制UI界面:烦琐
完全XML控制UI界面:不灵活
结论:混合控制
//例子并不高明
自定义组件界面:
//方法太多,例子不是很贴切
线性布局:不会换行
//属性讲解没有分类
表格布局:
一个TableRow就是一行,TableRow里面的每个组件就是一列
帧布局:
//霓虹灯例子倒是有创意,但是却忘记先讲线程了
组件
View