讀古今文學網 > Android程序設計:第2版 > 折疊和展開可擴展的UI界面 >

折疊和展開可擴展的UI界面

到目前為止,你已經發現我們包含三個片段:一個是為了大屏幕佈局左側邊欄的列表,另外兩個是為了屏幕右側邊欄的標籤,或者如果空間不夠,由活動顯示。因此,你目前尚未看到任何關於要怎麼放置片段的代碼。你已經看到了使用描述性UI來實現屏幕上三個完全不同的顯示方式,三者都使用相同的Java代碼。

關於屏幕大小和分辨率

該應用實現的關鍵點在於沒有任何處理屏幕大小、像素密度、方位的代碼。想像一下,如果應用需要考慮多個片段並排,或者在屏幕上疊加是否相互合適,那難度該多大啊。實際上,我們可以進一步考慮這個問題:代碼從未真正考慮過屏幕大小。相反地,代碼實現是要支持在佈局文件中指定的所有配置上都能夠正常運行。

程序對系統決定的佈局做出相應。以下代碼是這個示例應用的主活動。正如前面描述的Fragment子類,該代碼不包含任何顯式的關於屏幕尺寸大小,以及在屏幕上是否有一個或多個片段的判斷。它可以適應一個或兩個片段,但並不考慮在該活動中是否有一個或多個片段。

該類的關鍵代碼段如下:

1 查找Action Bar,設置一些選項。

2 初始化選項欄管理方式。TabManager是個工具類,在本章後面會詳細說明。

委託(Delegate)給Fragment類

在本例中,把用戶交互委託給Fragment子類,這種方式是使得不需要顯示判斷屏幕大小的方式之一。屏幕上包含片段,當通過widget和這些片段交互時,處理這些交互的代碼是在已創建好的Fragment子類中。

在這段代碼中,Fragment子類會在屏幕的右側邊欄顯示內容。在示例應用中有兩個這樣的Fragment子類,由於這兩個子類很相似,我們只說明其中一個:

1 首先,注意Fragment子類實現兩個接口:TabListener和SetData。TabListener接口支持Fragment子類通過Action Bar處理用戶界面的選項卡。

2 SetData接口支持在大屏幕佈局的左側邊欄列表中的Fragment子類,或顯示該Fragment的Activity,設置Fragment顯示的數據。