Android:是否可以在屏幕上创建Bottom和Top选项卡?

时间:2013-07-21 21:34:56

标签: android tabs

我想知道是否可能在顶部和底部有不同的标签,这些标签在点击时会导致不同的活动。用Google搜索但没有发现任何相关信息。

由于

1 个答案:

答案 0 :(得分: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的源代码应该如何改变以适应这种变化。

您可以查看原始TabHost here的来源。查看源代码,很明显代码中只有一个mTabWidget,并使用非常具体的ID = tabscom.android.internal.R.id.tabs)进行初始化。我们已经更改了ID,所以我们应该注意这一点。

那么,我们怎样才能改变原始来源?一种方法是创建我们自己的类并扩展核心TabHost。这并不容易,因为原始TabHost中的一半函数和成员都是private(为什么它们不是protected?!?)。无论如何,既然你有源代码并且非常简单,那么就可以做到。

假设你的新扩展类是MyTabHost(可能将它放在与原始TabHost相同的包中,这样你就可以访问没有privatepublic的变量/函数,然后你可以在XML中用TabHostMyTabHost实际替换单词com.yourpackage.MyTabHost,然后你的类将用于XML而不是原始。

从查看源代码,很明显默认情况下不支持此功能。但是 - 我认为,如果你真的想实现它,你可以看到一种方式。