带水平滚动的 FragmentTabHost [英] FragmentTabHost with horizontal scroll
问题描述
我正在尝试构建 FragmentTabHost 并使其水平滚动.我一直在寻找解决方案但找不到任何东西,所有帖子都是关于普通 TabHost 的.
I am trying to build a FragmentTabHost and make it horizontal Scrollable. I've been searching for a solution but couldn't find anything, all posts are about normal TabHost.
我正在使用 FragmentTabHost
我的布局是:
<android.support.v4.app.FragmentTabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:tag="trip_entry_tab"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TabWidget
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="0"/>
<FrameLayout
android:id="@+id/realtabcontent"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
</LinearLayout>
已经尝试将 tabwidget 嵌套到水平滚动视图中(这是我在其他帖子中可以找到的解决方案,但始终用于 TabHost 而不是用于 FragmentTabHost),但没有任何变化:
Already tried to nest the tabwidget into an horizontal scroll view (this is the solution I could find in other posts, but always for TabHost and not for FragmentTabHost), but nothing changes:
<HorizontalScrollView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:fillViewport="true"
android:scrollbars="none" >
<TabWidget
android:id="@android:id/tabs"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
</TabWidget>
</HorizontalScrollView>
我的标签刚刚缩小了,这真的不好看.有人让片段标签主机可滚动吗?
My tabs just got shrinked and that is really not nice looking. Has somebody make it to get a fragment tab host scrollable?
谢谢
推荐答案
根据我的经验,FragmentTabHost
不太关心 xml 定义,事情必须以编程方式进行.我通过从 xml 中删除 HorizontalScrollView
并将其添加到我的 onCreate
中为 FragmentActivity
使其工作.
Based on my experience, the FragmentTabHost
doesn't care much about the xml definitions, things must be made programmatically. I got it working by leaving out the HorizontalScrollView
from the xml and adding it in my onCreate
for the FragmentActivity
.
xml:
<android.support.v4.app.FragmentTabHost xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@android:id/tabhost"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TabWidget
android:id="@android:id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" />
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="0" />
<FrameLayout
android:id="@+id/realtabcontent"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1" />
</LinearLayout>
</android.support.v4.app.FragmentTabHost>
然后在添加选项卡后的 onCreate 中(也以编程方式):
Then in the onCreate after adding the tabs (also programmatically):
TabWidget tw = (TabWidget) findViewById(android.R.id.tabs);
LinearLayout ll = (LinearLayout) tw.getParent();
HorizontalScrollView hs = new HorizontalScrollView(this);
hs.setLayoutParams(new FrameLayout.LayoutParams(
FrameLayout.LayoutParams.MATCH_PARENT,
FrameLayout.LayoutParams.WRAP_CONTENT));
ll.addView(hs, 0);
ll.removeView(tw);
hs.addView(tw);
hs.setHorizontalScrollBarEnabled(false);
不知道这是否是最优雅的解决方案,但它似乎工作正常.
Don't know if this is the most elegant solution but it seems to work OK.
这篇关于带水平滚动的 FragmentTabHost的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!