首页 » Android程序设计:第2版 » Android程序设计:第2版全文在线阅读

《Android程序设计:第2版》折叠和展开可扩展的UI界面

关灯直达底部

到目前为止,你已经发现我们包含三个片段:一个是为了大屏幕布局左侧边栏的列表,另外两个是为了屏幕右侧边栏的标签,或者如果空间不够,由活动显示。因此,你目前尚未看到任何关于要怎么放置片段的代码。你已经看到了使用描述性UI来实现屏幕上三个完全不同的显示方式,三者都使用相同的Java代码。

关于屏幕大小和分辨率

该应用实现的关键点在于没有任何处理屏幕大小、像素密度、方位的代码。想象一下,如果应用需要考虑多个片段并排,或者在屏幕上叠加是否相互合适,那难度该多大啊。实际上,我们可以进一步考虑这个问题:代码从未真正考虑过屏幕大小。相反地,代码实现是要支持在布局文件中指定的所有配置上都能够正常运行。

程序对系统决定的布局做出相应。以下代码是这个示例应用的主活动。正如前面描述的Fragment子类,该代码不包含任何显式的关于屏幕尺寸大小,以及在屏幕上是否有一个或多个片段的判断。它可以适应一个或两个片段,但并不考虑在该活动中是否有一个或多个片段。

该类的关键代码段如下:

① 查找Action Bar,设置一些选项。

② 初始化选项栏管理方式。TabManager是个工具类,在本章后面会详细说明。

委托(Delegate)给Fragment类

在本例中,把用户交互委托给Fragment子类,这种方式是使得不需要显示判断屏幕大小的方式之一。屏幕上包含片段,当通过widget和这些片段交互时,处理这些交互的代码是在已创建好的Fragment子类中。

在这段代码中,Fragment子类会在屏幕的右侧边栏显示内容。在示例应用中有两个这样的Fragment子类,由于这两个子类很相似,我们只说明其中一个:

① 首先,注意Fragment子类实现两个接口:TabListener和SetData。TabListener接口支持Fragment子类通过Action Bar处理用户界面的选项卡。

② SetData接口支持在大屏幕布局的左侧边栏列表中的Fragment子类,或显示该Fragment的Activity,设置Fragment显示的数据。