我想知道是否有可能在顶部和底部有不同的选项卡,从而在单击时导致不同的活动。谷歌搜索但没有找到任何关于它的信息。
谢谢
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 = tabs
( com.android.internal.R.id.tabs
) 初始化的。我们已经更改了 ID,所以我们应该注意这一点。
那么,我们怎样才能改变原始来源呢?一种方法是创建我们自己的类并扩展核心 TabHost。这并不容易,因为原始 TabHost 中的一半函数和成员是private
(为什么不是protected
?!?)。不管怎样,既然你有源代码,而且很简单,那就可以做到。
假设您的新扩展类是MyTabHost
(可能将其与原始 TabHost 放在同一个包中,这样您就可以访问没有private
or的变量/函数public
),然后您可以在 XML 中将单词替换为TabHost
orMyTabHost
实际上com.yourpackage.MyTabHost
)然后是您的类将在 XML 中使用而不是原来的。
通过查看源代码,很明显默认情况下不支持此功能。但是 - 我认为如果你真的想实现它,你可以找到一种方法。