Android学习笔记

android dev : looks like html dev

基本开发套路:
获得组件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的方式:
代码:
Resource r = 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:图片
src drawable中的资源

按钮:
Button
ImageButton  src
ToggleButton  textOn,textOff

Radio:
RadioGroup  onCheckedChangeListener
RadioButton text,tag 常用来展示,数据的存储

Checkbox:
CheckBox  onCheckedChangeListener

Spiner:下拉列表
entries  下拉数组
spinnerMode  模式,dialoge, dropdown
可添加adapter作为数据,extends BaseAdapter 重点实现getCount(),getView()
选中事件:setOnItemSelectedListner()

AlertDialog: 弹出框
Builder
title, message,
三按钮:positiveButton,negativeButton,NeturalButton
选项:items
单选:singleChoiceItem
多选:mutiChoiceItem
自定义:view  使用view inflator


布局
线性布局: table布局
LinearLayout
  orientation = vertical or horizontal
  gravity = center
  weight  按比重,在子组件中设置

代码动态生成布局:
1,纯代码,很少用
2,通过LayoutInflator加载可重用xml layout
View v = 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:时间选择 
setIs24HoursView  24小时制

XXXDialog:弹出框式日期时间选择

ProgressBar:进度条
默认是圆圈,长条形需要设置style="@android:style/Widget.ProgressBar.horizontal"

ProgressDialog

异步处理方式
Handler要在主线程中声明,耗时任务在新线程中执行,执行后,调用Handler的sendMessage可以发消息,通知CallBack;
CallBack中实现handleMessage可以处理消息,完成控件更新;


Activity
  ->Windows
     ->XXXLayout
        ->Component
name, label
推荐使用wizard生成

跳转
Intent intent = new intent();
intent.setClass(this, SecondActivity.class);
startActivity(intent)
Android的返回按钮,会回退Activity
传值:
intent.putExtra();
拿值:
Intent intent=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

猜你喜欢

转载自hellobbboy.iteye.com/blog/2400099