如何在选项卡下定位android选项卡内容?

时间:2014-07-13 17:32:45

标签: android android-layout

enter image description here

正如您所看到的,片段内容“新文本”与选项卡小部件位于同一行。标签内容只是:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Text"
        android:layout_gravity="center_horizontal" />

</LinearLayout>

和标签布局:

<android.support.v4.app.FragmentTabHost
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@android:id/tabhost">

    <RelativeLayout
        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"
            android:background="@color/white"/>

        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent">

            <LinearLayout
                android:id="@+id/tab1"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:orientation="vertical"/>

            <LinearLayout
                android:id="@+id/tab2"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:orientation="vertical"/>

        </FrameLayout>
    </RelativeLayout>
</android.support.v4.app.FragmentTabHost >

我尝试使用填充但填充不是很安全,因为选项卡小部件高度在方向更改时会更改。我也试过

android:layout_alignParentBottom="@android:id/tabs"

在框架布局上,但这没有效果。

如何在标签窗口小部件/导航下正确定位标签内容?

EDIT片段设置:

mTabHost = (FragmentTabHost)rootView.findViewById(android.R.id.tabhost);
mTabHost.setup(getActivity(), getChildFragmentManager(), android.R.id.tabhost);

mTabHost.addTab(mTabHost.newTabSpec("tab1").setIndicator("Tab 1"),
                SomeFragment.class, null);
mTabHost.addTab(mTabHost.newTabSpec("tab2").setIndicator("Tab 2"),
                SomeFragment.class, null);

1 个答案:

答案 0 :(得分:2)

修改

您的问题出在FragmentTabHost设置方法中。请参阅顶部的示例+设置描述(Context context,FragmentManager manager,int containerId)方法 http://developer.android.com/reference/android/support/v4/app/FragmentTabHost.html


首先 android:layout_alignParentBottom 不使用 id 作为值,但布尔(true / false) - 它告诉孩子应该或不应该将其底部边界与父底部边界对齐。您可以将其设置为true,但只有这样才能解决您的问题。您正在寻找的属性是 android:layout_below =&#34; @android:id / tabs&#34; 。使用这两个属性意味着tabcontent视图将位于TabWidget(id:@android:id / tabs)的正下方,并将占据屏幕的其余部分,直到父底部边界。

    <FrameLayout
        android:id="@android:id/tabcontent"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@android:id/tabs"
        android:layout_alignParentBottom="true"
        >

顺便说一句。请使用&#34; match_parent&#34;而不是&#34; fill_parent&#34; - 它意味着相同但是&#34; fill_parent&#34;是一个旧的命名,它在Froyo中被弃用(API级别8)。更多信息:http://developer.android.com/reference/android/view/ViewGroup.LayoutParams.html#FILL_PARENT
这里:
Is deprecated word the only difference between fill_parent and match_parent


如果您遇到RelativeLayout问题,请改用LinearLayout:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.app.FragmentTabHost xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@android:id/tabhost">

    <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:background="@color/white"/>

        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1">

            <LinearLayout
                android:id="@+id/tab1"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical"/>

            <LinearLayout
                android:id="@+id/tab2"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical"/>

        </FrameLayout>
    </LinearLayout>
</android.support.v4.app.FragmentTabHost>