2013-07-21 62 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 *答案[[]] –

相关问题