2010-02-20 129 views
6

我正在尋找一個小部件,它的行爲與圖庫部件類似,但是垂直滾動而不是水平滾動。我搜索了所有內容,顯然答案是沒有這樣的預製小部件存在。Android:垂直畫廊?

所以我說我自己,哦,我會看看android源代碼中的庫類,並修改它來垂直滾動。不那麼容易。 android SDK隱藏了很多東西(可以理解爲框架維護),但是它也很難擴展小部件。例如,圖庫類從它的父類AbsSpinner(mSelectedPosition等)中使用了大量的成員變量,以及它的父類的父類等等,從應用程序開發者的角度來看,這些變量根本無法訪問。如果不訪問這些成員變量,我不能使用庫類中的類似代碼供我自己使用。

將繼承鏈向上移動並將這些父類的源代碼全部放在我的項目中,或者從頭開始編寫小部件而不使用已經解決問題的現有框架小部件,我無法找到獲得垂直滾動畫廊的方法。

有沒有更好的方法?爲什麼android框架使擴展小部件如此困難?

+1

根據您需要的行爲,爲什麼不在一個水平的LinearLayout中使用正常的ListView,而在另一側使用ImageView呢? – 2010-02-20 17:06:26

回答

12

有沒有更好的方法?

由於我們不知道你在建什麼,這是不可能的。我同意Yoni Samlan的評論,ListView可能足以滿足您的需求。

爲什麼android框架使 擴展窗口小部件如此困難?

雖然可以想象的是一個重新實現Gallery可能更簡單爲你讓它東方不同,Android核心團隊必須權衡這樣重新實現對其他發展重點。

其中一個優先事項是SDK保真度。他們希望確保在最大程度上爲Android 1.5編寫的代碼可以在沒有修改的情況下在Android 2.1上運行。這通過兩種方式來限制它們。首先,他們不能只是改變現有的Gallery,例如,以適應你的願望,如果這樣做會導致他們打破現有的API。其次,核心Android團隊不會公開新的方法或類,即使這些方法或類可能對第三方開發人員有益,除非和直到團隊準備好長期支持這些方法或類。

Android最初是在SDK存在之前編寫的。這就是爲什麼大多數內置應用程序(例如計算器)無法單獨使用SDK構建的原因,但需要構建爲固件映像的一部分。同樣,作爲創建初始SDK的一部分,核心Android團隊必須作出決定,瞭解如何最好地利用現有代碼,創建我們可以使用的公共內容以及我們無法保護的私有內容,同時牢記SDK的保真度。正如您可能已經注意到的那樣,Android非常龐大,因此創建SDK必須佔用相應的大量員工時間。爲了增加有些人可以創造垂直Gallery的可能性,重寫它的很多並不是很高。

在理想的世界中,是的,我們可以更容易地擴展內置小部件並顯着修改其行爲。同樣,在理想的世界裏,我會有頭髮......:-)

+9

+1,'同理,在理想的世界裏,我會有頭髮...... :-)' – Samuel 2011-05-04 00:55:17