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