android:layout_marginBottom 不离开 space 在底部
android:layout_marginBottom not leaving space at bottom
我的项目中有一个 TabHost activity。当我有以下 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)吗?
好吧,有一种方法可以通过 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>
将父 LinearLayout 转换为 Relativelayout。框架布局应该有参数 align_parenttop = true,tabwidget 应该有 align_parentBottom = true。让剩下的留下来。
我的项目中有一个 TabHost activity。当我有以下 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)吗?
好吧,有一种方法可以通过 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>
将父 LinearLayout 转换为 Relativelayout。框架布局应该有参数 align_parenttop = true,tabwidget 应该有 align_parentBottom = true。让剩下的留下来。