欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android之组件详解

程序员文章站 2022-05-15 18:05:39
...

对话框

对话框不能作为独立组件存在,必须寄宿在某个界面组件。

对话框的生命周期更短,更轻量,数据传输更快。

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的展示和功能以它为核心。

 

 

    自动完成文本控件AutoCompleteTextViewPupWindow的应用实例。由一个文本输入控件和与之绑定的PupWindow对象共同组成。文本框控件作为锚点控件对象。内容的弹出是PupWindow.showAsDropDown函数执行。