Android之组件详解
对话框
对话框不能作为独立组件存在,必须寄宿在某个界面组件。
对话框的生命周期更短,更轻量,数据传输更快。
Android中,对话框都派生自Dialog,每个Dialog也有Window对象,负责控件树的构造和管理。
AlertDialog对象有三块区域,标题区域和内容区域和操作区域。开发者往往通过AlertDialog.Builder对象辅助构造Dialog。
和可选菜单一样,构造对话框比较耗时,可能会导致界面阻塞。如果一个对话框反复使用则需要使用缓存机制。
在界面组件中,通过Activity.showDialog弹出指定的对话框,开发者需要在Activity.onCreateDialog函数中对其进行构造,一旦被构造,泽被缓存下来。Activity.dismissDialog隐藏对话框,但不会导致对话框对象销毁。若开发者期望提前释放对象占据的空间,Activity.removeDialog。
利用这种模式构建对话框对象,能避免反复构建对话框对象,还可以将对话框对象融入到界面组件的生命周期。组件界面被强行回收时,会先遍历缓存在其中的对话框对象,调用他们的Dialog.onSaveInstanceState对象,保存对话框的交互状态。组件再次重构时,在调用对话框的Dialog.onRestoreInstanceState恢复。
弹出窗口PopWindow
弹出窗口不包含Window对象。PupWindow自行管理其控件树与窗口服务建立的双向连接。
PupWindow不像Dialog从屏幕固定位置弹出,而是依赖于锚点控件对象的位置。锚点控件对象是界面组件中某个控件,PupWindow的展示和功能以它为核心。
自动完成文本控件AutoCompleteTextView是PupWindow的应用实例。由一个文本输入控件和与之绑定的PupWindow对象共同组成。文本框控件作为锚点控件对象。内容的弹出是PupWindow.showAsDropDown函数执行。
上一篇: 机器学习实践中应避免的七种常见错误