其实我是想看ListView,但是ListView135k,父类AbsListView216k,爷类AdapterView39k。所以只能从老人家下手了。AdapterView直接继承了View,所以从这里看也是比较简单的方法。刚开始写android的时候总觉得Spinner这种鸡肋类存在没什么意义。看了类结构(前一篇有)之后才发现,这个类不常用,但是可以拿来学习,因为很小啊。乍看AdapterView很难看出它是做什么的。而AbsSpinner15k,Spinner25k这么看起来就简单多了吧。

不多说了,问题还得一点一点解决。


BaseLine

看源代码的时候多少会涉及到baseline的问题。View带有一个方法叫getBaseline(),默认返回-1。

baseline是英文中的东西。还记得中学时写英文单词用的作业本吗?如上图,baseline就是那根红线。对于TextView这种包含文字的控件,baseline是需要考虑到的。

再留张图以后做参考:


http://www.myfirstfont.com/glossary.html


onAttachedToWindow()和onDetachedFromWindow()

它们没有被写在Activity的生命周期中,初学的时候也没有上。onAttachedToWindow()会在第一次onResume()之后被调用,这是view刚刚获得canvas。onDetachedFromWindow()会在onDestroy()时被调用(可能是在后面),在调用时,已经没有canvas用了。Spinner中,onDetachedFromWindow()被用于销毁AlertDialog。我之前都在activity.onDestroy()中销毁对话框。可是View没有onDestroy方法,所以,如果需要在View中再添加AlertDialog,那只能在这里销毁了。回过头来,View.onAttachedToWindow相当于Activity.onCreate(),而View.onDetachedFromWindow()相当于View.onDetachedFromWindow()。View有个包级方法dispatchDetachedFromWindow()这里会调用onDetachedFromWindow(),也就是说,这个方法会被系统调用。activity的onAttachedFromWindow()和onDetachedFromWindow()中没有对view的相应方法进行调用。





更多相关文章

  1. eclipse 上调试android的自带应用方法 一
  2. Android序列化之Parcel
  3. Android的菜单
  4. Android(安卓)四大组件的工作过程
  5. [置顶] android-async-http框架库使用基础
  6. Android(安卓)Activity与Service通信
  7. android之定时器AlarmManager
  8. android进行异步更新UI的四种方式(转载)
  9. ym—— Android(安卓)5.0学习之定义阴影

随机推荐

  1. 关于直接在View中实现Gesture的功能
  2. Android(安卓)自定义进度条
  3. android.view.WindowLeaked的解决办法
  4. 研究 android apk安装卸载等 产生的 系统
  5. MVP / RxJava / Retrofit / RxBus 笔记
  6. (转)Android生成heap dump文件(.hprof)
  7. 极光推送实现锁屏推送以及推送给指定的人
  8. Android(安卓)apk动态加载机制的研究(二)
  9. 一键升级 ME860 CWM recovery
  10. android 辅助工具类—— 图片缓冲池