2

我想知道是否有可能在顶部和底部有不同的选项卡,从而在单击时导致不同的活动。谷歌搜索但没有找到任何关于它的信息。

谢谢

4

1 回答 1

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 您可以在此处查看原文的来源。查看源代码很明显,代码只有一个 mTab​​Widget,它是使用非常特定的 ID = tabs( com.android.internal.R.id.tabs) 初始化的。我们已经更改了 ID,所以我们应该注意这一点。

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

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

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

于 2013-07-22T13:33:20.050 回答