android:layout_marginBottom不会在底部留空间

时间:2016-08-16 23:25:04

标签: android android-linearlayout android-tabhost android-framelayout tabwidget

我的项目中有TabHost活动。当我有以下XML时,选项卡不在屏幕上,根本不显示。

<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/tabHost"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activityVerticalMargin"
    android:paddingLeft="@dimen/activityHorizontalMargin"
    android:paddingRight="@dimen/activityHorizontalMargin"
    android:paddingTop="@dimen/activityVerticalMargin"
    tools:context=".SomeActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginBottom="50dp">

            <some elements here>

        </FrameLayout>

        <TabWidget
            android:id="@android:id/tabs"
            android:layout_width="match_parent"
            android:layout_height="50dp" />

    </LinearLayout>

</TabHost>

但是,如果我略微修改看起来像这样,标签显示但它们不在底部,而不是我想要的样子。

<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/tabHost"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activityVerticalMargin"
    android:paddingLeft="@dimen/activityHorizontalMargin"
    android:paddingRight="@dimen/activityHorizontalMargin"
    android:paddingTop="@dimen/activityVerticalMargin"
    tools:context=".SomeActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="50dp">

            <!-- layout_height above was changed to wrap_content -->

            <some elements here>

        </FrameLayout>

        <TabWidget
            android:id="@android:id/tabs"
            android:layout_width="match_parent"
            android:layout_height="50dp" />

    </LinearLayout>

</TabHost>

为什么第一种情况不起作用?是不是layout_marginBottom应该设置布局match_parent - margin的高度(在这种情况下为50dp)?

2 个答案:

答案 0 :(得分:1)

将父LinearLayout转换为Relativelayout。框架布局应该有参数align_parenttop = true,tabwidget应该有align_parentBottom = true。剩下的就剩下了。

答案 1 :(得分:0)

嗯,有一种方法可以通过LinearLayout执行此操作(我们应该避免使用RelativeLayout)。我们可以为您的TabWidget元素提供负余量。以下是您的布局的外观:

<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
         xmlns:tools="http://schemas.android.com/tools"
         android:id="@+id/tabHost"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:paddingBottom="@dimen/activityVerticalMargin"
         android:paddingLeft="@dimen/activityHorizontalMargin"
         android:paddingRight="@dimen/activityHorizontalMargin"
         android:paddingTop="@dimen/activityVerticalMargin"
         tools:context=".SomeActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginBottom="50dp">

            <!-- some elements here -->

        </FrameLayout>

        <TabWidget
            android:id="@android:id/tabs"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:layout_marginTop="-50dp"/>

    </LinearLayout>

</TabHost>