Android:可以在屏幕上创建底部和顶部选项卡吗?

Android:可以在屏幕上创建底部和顶部选项卡吗?,android,tabs,Android,Tabs,我想知道是否有可能在顶部和底部有不同的选项卡,从而在单击时导致不同的活动。谷歌搜索了一下,但什么也没找到 谢谢安卓的好处是,你想做的几乎每件事都应该是可能的。如果我们要更改您的XML,我们会将其更改为: <?xml version="1.0" encoding="utf-8"?> <TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/tabh

我想知道是否有可能在顶部和底部有不同的选项卡,从而在单击时导致不同的活动。谷歌搜索了一下,但什么也没找到


谢谢

安卓的好处是,你想做的几乎每件事都应该是可能的。如果我们要更改您的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
的源代码。从源代码看,很明显代码只有一个mTabWidget,这是使用非常特定的ID=
选项卡进行初始化的(
com.android.internal.R.ID.tabs
)。我们已经更改了ID,所以我们应该注意这一点

那么,我们怎样才能改变原始来源呢?一种方法是创建我们自己的类并扩展核心TabHost。这并不容易,因为原始TabHost中有一半的函数和成员是私有的(为什么它们不受保护呢?)。不管怎么说,因为你有源代码,而且它非常简单,所以你有可能做到这一点

假设您的新扩展类是
MyTabHost
(可能将其放在与原始TabHost相同的包中,这样您就可以访问没有
private
public
的变量/函数),然后您可以将XML中的单词
TabHost
替换为
MyTabHost
com.yourpackage.MyTabHost
,然后您的类将在XML中使用,而不是原始类


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

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
的源代码。从源代码看,很明显代码只有一个mTabWidget,这是使用非常特定的ID=
选项卡进行初始化的(
com.android.internal.R.ID.tabs
)。我们已经更改了ID,所以我们应该注意这一点

那么,我们怎样才能改变原始来源呢?一种方法是创建我们自己的类并扩展核心TabHost。这并不容易,因为原始TabHost中有一半的函数和成员是私有的(为什么它们不受保护呢?)。不管怎么说,因为你有源代码,而且它非常简单,所以你有可能做到这一点

假设您的新扩展类是
MyTabHost
(可能将其放在与原始TabHost相同的包中,这样您就可以访问没有
private
public
的变量/函数),然后您可以将XML中的单词
TabHost
替换为
MyTabHost
com.yourpackage.MyTabHost
,然后您的类将在XML中使用,而不是原始类


从源代码来看,很明显默认情况下不支持此功能。但是——我认为,如果你真的想实现这一目标,你可以想方设法。

当然。在两端抛出一个TabView。现在,让它们正确地协同工作可能需要额外的工作。请提供有关您的问题的更多信息,您是在尝试在顶部和底部使用不同的选项卡,还是仅使用两个具有相同选项卡的栏?我已尝试复制我的TabWidget,但没有成功。你能说得更具体些吗?thanksim试图在顶部和底部有不同的标签,从而导致不同的活动。回答:编辑我的问题以更好地理解Sure。在两端抛出一个TabView。现在,让它们正确地协同工作可能需要额外的工作。请提供有关您的问题的更多信息,您是在尝试在顶部和底部使用不同的选项卡,还是仅使用两个具有相同选项卡的栏?我已尝试复制我的TabWidget,但没有成功。你能说得更具体些吗?thanksim试图在顶部和底部有不同的选项卡,从而导致不同的活动。回答:编辑我的问题以便更好地理解