2009-12-22 39 views
0

我需要創建一個類似於iPhone中的UITabBar的控件,該控件將出現在我的應用程序的每個活動中。 UITabBar本質上是一系列按鈕,表現出TAB一樣的行爲:每個按鈕映射到一個活動。我有兩個解決方案:
1.在每個活動的佈局XML中,我插入一個<LinearLayout><Button/><Button/><Button/></LinearLayout>元素。然後有一個通用的監聽器類來處理按鈕點擊。所以,每個活動都會有一個這個監聽器的實例。
2.要創建一個擴展LinearLayout類的自定義Widget,請將所有按鈕設置爲其靜態成員,並讓它處理按鈕點擊。在每個屏幕中包含此自定義控件。創建自定義控件或製作按鈕內嵌

我不確定採用哪種方法。請指教。替代品還讚賞

下面是什麼,我認爲這個問題:
與第一種方法的問題:

1.它會產生大量的樣板代碼(findViewByIds,setOnClickListener等)
2。假定有5個活動和3個標籤按鈕,在運行時創建將按鈕對象的總數量爲5×3 = 15

我想採取第二方法,因爲:
1.所有代碼(狀態和行爲)將由Widget類封裝。較少的Boilerplate代碼。
2.由於按鈕將是靜態成員,因此在運行時創建的Button對象的總數將只有三個。儘管如此,靜態成員會在內存中保留更長時間(直到JVM卸載該類),因爲控制出現在每個屏幕上,我認爲這可以放棄。

謝謝。

回答

0

不幸的是,我找不到一種方法來定製內置的TabWidget,使其看起來像UITabBar。所以,我將創建一個自定義控件並將按鈕作爲靜態成員(採用第二種方法)。控件將按預期處理點擊。
我注意到屢獲殊榮的Plink Art應用程序也有一個類似於iPhone UITabBar的選項卡控件。

1

爲什麼不直接使用Android中現有的TabWidget實現?

http://developer.android.com/guide/tutorials/views/hello-tabwidget.html

不僅是實現自己的小部件額外的工作,它在與平臺上的其他應用相比是有可能覺得格格不入。

特別是,這裏的一些問題,我看到:

  1. 當一個系統更新由於標籤欄的變化看,你將不得不重新編寫代碼。你也不可能完全匹配內置標籤欄的外觀和感覺。 (在OS X上思考Java)

  2. 每次用戶單擊某個選項卡時,它都會向堆棧添加另一個活動。這不僅浪費了內存,而且每次用戶單擊手機上的後退按鈕時,都會轉到上一個選項卡。這不是標籤欄應該工作的方式。

+0

正如我所說,我有一個要求模擬TabBar;不幸的是,我無法控制這裏的任何事情。我不認爲內置TabWidget的外觀可以定製爲像iPhone的TabBar。 顯然,人們不關心應用程序是否與其他應用程序看起來不同。 我認爲你的第二點可以通過使用適當的意圖標誌(重新排序到前面,清除頂部等)在一定程度上處理;儘管我必須說它會有點複雜。 – Samuh 2009-12-22 08:12:13