2013-07-21 130 views
2

我想知道是否有可能在頂部和底部有不同的標籤,導致點擊時發生不同的活動。谷歌搜索,但沒有發現任何關於它。Android:是否可以在屏幕上創建Bottom和Top標籤?

感謝

+0

當然。在兩端扔一個TabView。現在讓他們正確行動可能需要額外的工作。 –

+0

請爲您的問題提供更多信息,您是否嘗試在頂部和底部使用不同的選項卡,或者只使用兩個具有相同選項卡的酒吧? –

+0

我試圖複製我的TabWidget,但沒有做到這一點。你可以請更具體嗎?謝謝 –

回答

4

與Android的好處是你想要做的應該是可能的,幾乎所有的東西。如果我們要改變你的XML,我們將其更改爲類似:

<?xml version="1.0" encoding="utf-8"?> 
<TabHost xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/tabhost" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <TabWidget 
     android:id="@android:id/tabs_top" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="0" /> 

    <FrameLayout 
     android:id="@android:id/tabcontent" 
     android:layout_width="fill_parent" 
     android:layout_height="0dip" 
     android:layout_weight="1" /> 

    <TabWidget 
     android:id="@android:id/tabs_bottom" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="0" /> 
</LinearLayout> 

</TabHost> 

請注意,我已經改變了TabWidgets的ID的。

這只是問題的一半。另一半是如何改變核心類TabHost的源代碼以適應此更改。

您可以查看原始TabHosthere的來源。查看源代碼,很明顯,代碼只有一個mTabWidget,並使用非常特定的ID = tabscom.android.internal.R.id.tabs)進行初始化。我們更改了ID,所以我們應該留意這一點。

那麼,我們該如何改變原始來源呢?一種方法是創建我們自己的類並擴展核心TabHost。這並不容易,因爲原始TabHost中的一半功能和成員是private(爲什麼它們不是protected?!?)。無論如何,因爲你有源代碼,而且非常簡單,所以可以這麼做。

比方說,您的新擴展的類是MyTabHost(可能將其放置在同一個包的原始TabHost只是讓你可以訪問變量/功能,這都沒有privatepublic),那麼你可以在XML字替代TabHostMyTabHostcom.yourpackage.MyTabHost實際),然後你的課程將用於XML而不是原來的。

從源代碼看,很明顯這個功能默認不支持。但是 - 我認爲,如果你真的想要做到這一點,你可以看到一種方式。

+0

感謝很多傢伙。 5 *答案[[]] –

相關問題