我想知道顶部和底部是否可以有不同的选项卡,单击时会导致不同的 Activity 。谷歌搜索但没有找到任何相关信息。
谢谢
最佳答案
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>
请注意,我已经更改了 TabWidget 的 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 中使用,而不是原始的。
从源码来看,很明显默认是不支持这个功能的。但是 - 我认为如果你真的想实现它,你可以找到办法。
关于Android:是否可以在屏幕上同时创建底部和顶部选项卡?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17777168/