《疯狂Android讲义》

《疯狂Android讲义》笔记


第二章 android应用的界面编程

2.1 开发自定义的View

继承View基类的子类,然后重写View中的方法。

onFinishInflate(): 当应用从XML布局文件加载该组件并利用它来构建界面之后,该方法将会被回调。

onMeasure(int,int): 调用该方法来检测View组件及它所包含的所有子组件的大小。

onLayout(boolean,int,int,int,int): 当该组件需要分配其子组件的位置、大小时,该方法就会被会回调。

onSizeChanged(int,int,int,int): 当该组件的大小被改变时回调该方法。

onDraw(Canvas): 当该组件将要绘制它的内容时回调该方法进行绘制。

onKeyDown(int,KeyEvent): 当某个键被按下时触发该方法。

onKeyUp(int,KeyEvent): 当松开某个键时触发该方法。

onTrackballEvent(MoyionEvent):当轨迹球事件时触发该方法。

onTouchEvent(MotionEvent): 当发生触摸屏事件时触发该方法。

onWindowFocusChanged(boolean): 当该组件得到、失去焦点时触发该方法。

onAttachedToWindow(): 当把该组件放入某个窗口时触发该方法。

onDetachedFromWindow(): 当把该组件从某个窗口上分离时触发该方法。

onWindowVisibilityChanged(int): 当包含改组件的窗口的可见性发生改变时触发该方法。
2.3 UI组件 textView及其子类
  • 实例:不同颜色、字体、带连接的文本(使用textview xml属性)
  • 实例:圆角边框。渐变背景的textview(使用xml文件当成drawable 写入background)
  • 实例:利用单选按钮、复选框获取用户信息(RadioButton、CheckBox )
  • 实例:动态改变布局(ToggleButton 、 Switch)
  • 时钟(AnalogClock、DigitalClock)
    • AnalogClock模拟时钟,DigitalClock显示数字时钟
  • 计时器(Chronometer)
    • setBase(long) 设置计时器的起始时间
    • setFormat(String) 设置显示时间额格式
    • start()
    • stop()
    • setOnChronometerTickListener() 当计时器改变时触发该监听器。
2.4 UI组件 imageView及其子类

子类:

  • ImageButton
    • ZoomButton:可以代表放大缩小按钮
    • ZoomControls:
  • QuickContactBadge:关联联系人

    //一个ImageView现实另一个Image的局部图片
    Bitmap bitmao = bitmaoDrawable.getBitmao();
    image2.setImageBitmap(Bitmap.createBitmap(bitmap,x,y,120,120));
    image2.setAlpha(alpha);     
    
2.5 UI组件:AdapterView及子类
  • Adapter常用实现类:

    • ArrayAdapter:
    • SimpleAdapter:
    • SimpleCursorAdapter:
    • BaseAdapter:
  • ListView(列表视图)

    ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(this,R.layout.checked_item,arr2);
    list2.setAdapter(adapter2);
    //创建ArrayAdapter需要指定的参数
    //context、textViewResourceId(代表一个TextView,指定布局)、数组或list(指定内容数据)
    
  • 使用SimpleAdapter创建ListView

  • AutoCompleteTextView,MutiAutoCompleteTextView(自动完成文本框)
  • gridview(网格视图)
  • sinner 下拉框
  • AdapterViewFlipper
2.6 UI组件,ProgressBar及其子类
  • 进度条

    • 环形进度条(不能显示进度) 和 水平进度条
    • 显示在标题上的进度条
  • 显示在标题上的进度条

    //设置窗口特征 : 启用显示进度的进度条
    requestWindoeFeature(Window.FEATURE_PROGRESS);      //设置窗口特征: 启用不显示进度的进度条
    requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
    //调用Activity的 setProgressBarVisibility(boolean) 或者 setProgressBarIndeterminateVisibility(boolean)即可控制进度条的显示和隐藏
    
  • 拖动条(seekBar) (继承了ProgresBar)

  • 星级评分条(RatingBar):通过星星来表示进度
2.7 UI组件,ViewAnimator及其子类
  • ViewSwitcher:代表视图切换组件
  • ImageSwitcher(图片切换器)
    • 为ImageSwitcher提供一个ViewFactory,viewFactory生成的View组件必须是ImageView
    • 切换图片时 只要调用ImageSwitcher的setImageDrawable , setImageResource, setImageURI方法更换图片

2.7.4到第三章之间先跳过把


第三章android的事件处理

3.2基于监听的事件处理

android为不同的界面组件提供了不同的监听器接口,比如View

  • View.OnClickListener:单击事件的事件监听器必须实现的接口。
  • View.OnCreateContextMenuListener:创建上下文菜单时间的时间监听器必须实现的接口。
  • View.OnFocusChangeListener:焦点改变事件的事件监听器必须实现的接口。
  • View.OnKeyListener:按键时间监听器必须实现的接口。
  • View.OnLongClickListener:长单击时间的事件监听器必须实现的接口。
  • View.OnTouchListener:触摸屏事件的事件监听器必须实现的接口。
3.4响应系统设置的事件
//调用Activity的如下方法来获取系统的Configuration对象
Configuration cfg = getResource().getConfiguration();
//然后使用Configuration对象的属性来获取系统配置 

在Activity中重写 onConfigurationChanged来响应系统设置更改。
3.5handler消息的传递机制
  • 主UI线程中系统已经初始化了一个Looper对象,因此程序直接创建Handler即可
  • 自己启动的子线程,必须创建一个Looper对象并启动它
    • 调用Looper的prepare()方法为当前线程创建Looper对象
    • 调用Looper的loop()方法来启动Looper
3.6异步任务 asynctask

在新线程中更新UI组件方法

  • 使用Hanlder
  • Activity.runOnUiThread(Runnable)
  • View.post(Runnable)
  • View.postDelayed(Runnable,long)

使用AsyncTask:

  1. 创建AsyncTask子类
  2. 实现doInBackground(Params…):后台线程要完成的任务
  3. 实现obPregressUpdate(Progress… values):在doInBackground()方法中调用publisjProgressUpdate()方法更新任务进度,将会触发该方法。
  4. onPreExecute():该方法在执行后台耗时操作钱被调用,一般用于完成初始化准备工作。
  5. onPostExecute(Result result):当doInBackground()完成后,会自动调用obPostExecute()
  6. 使用AsyncTask的实例execute(Params…params)开始耗时任务。

第四章 深入了解Activity与Fragment

Activity:
  • LauncherActivity
  • ExpandableListActivity
  • preferenceActivity 配合PreferenceFragment
启动关闭Activity
  • startActivity(Intent intent) ;startActivityForResult(Intent intent,int requestCode)
  • finish() ; finishActivity(int requestCode)
  • startActivityForResult()启动的Activity应该 调用setResult返回结果,当前activity重写OnActivityResult接收结果
使用Bundle在Activity之间交换数据
  • Intent
    • putExtras(Bundle data) ; getExtras()
    • putExtra(String name,xxx value) ; getXxxExtra(String name)
  • Bundle
    • putXxx(String key,Xxx data) ; getXxx(String key)
    • putSerializable(String key,Serializable data) ; getSerializable(String key , Serializable data)
生命周期与加载模式
  • 生命周期

    • onCreate()
    • onStart()
    • onRestart()
    • onResume()
    • onPause()
    • onStop()
    • onDestory()
  • 加载模式 (配置Activity时指定android:launchMode属性)

    • standard:默认。为目标Activity创建新的实例,并将实例添加到当前Task栈中。
    • singleTop:若启动目标Activity已经位于Task栈顶,系统不会创建新的实例,否则与standard模式相同
    • singleTask :
      • 若目标Activity不存在,则创建并加入栈顶
      • 若目标Activity已经位于栈顶,则与singleTop相同
      • 若目标Activity存在,且不位于栈顶,则将该activity上的其他activity都移出栈
    • singleInstance 在所有Task中只会创建一个目标Activity
fragment

回调:

  • onCreate():初始化必要组件
  • onCreateView():返回一个该Fragment所显示的View
  • onPause(): 当用户离开
  • onAttach():当该Fragment被添加、显示到Activity时,回调
  • onDetach():当该Fragment从它所属的Activity中被删除时回调

与Activity通信:

  • 将Fragment添加到Activity
    • 在布局文件中使用
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值