Android:对齐父底端+底边距

我使用了相对布局,我想将按钮设置在屏幕底部,但是这把所有按钮都放到了底部,我希望有一些边距,因此在屏幕末端之间有一些空间/ 视图和按钮。 但是,由于某种原因,无论我做什么按钮边距,在2.1+上都什么都不做。 相对布局包含背景,因此我无法保证其空白。

有人知道解决办法吗?

android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="0dp"
android:background="@drawable/background" >
android:id="@+id/confirm_mobile_button_next"
android:layout_width="fill_parent"
android:layout_height="40dip"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="false"
android:layout_centerHorizontal="false"
android:layout_centerInParent="false"
android:layout_margin="15dp"
android:background="@drawable/button_shape_selector"
android:paddingLeft="10dip"
android:paddingRight="10dip"
android:text="@string/confirm_mobile_no_continue"
android:textColor="@color/white"
android:textStyle="bold" />

10个解决方案

64 votes

您可以简单地向RelativeLayout中添加填充,而不是向Button中添加空白,例如 android:paddingBottom="15dp"。

通常,我总是使用API Level 8设置在Eclipse预览中测试布局。 对于包括ICS和JB在内的大多数设备,这给出了相当准确的结果。

André answered 2019-10-05T01:57:01Z

30 votes

您可以做的另一件事是将RelativeLayout对准ImageView的底部,然后将其高度设置为您要使用的底部边距(或简单地为TextView指定一个值),如下所示:

android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/some_image"
android:adjustViewBounds="true"
/>
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Some Overlay"
android:padding="3dip"
android:gravity="center_vertical|center_horizontal"
android:layout_above="@+id/empty_view"
android:layout_marginBottom="35dip"
/>
android:id = "@+id/empty_view"
android:layout_height = "30dip"
android:layout_width = "match_parent"
android:visibility="invisible"
android:layout_alignParentBottom="true"
/>
本示例用ImageView填充RelativeLayout,并在ImageView上放置TextView。
ajacian81 answered 2019-10-05T01:57:33Z
15 votes
可以使用translateY属性
translateY="-16dp"
最终代码
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="0dp"
android:background="@drawable/background">
android:id="@+id/confirm_mobile_button_next"
android:layout_width="fill_parent"
android:layout_height="40dip"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="false"
android:layout_centerHorizontal="false"
android:layout_centerInParent="false"
android:layout_margin="15dp"
android:background="@drawable/button_shape_selector"
android:paddingLeft="10dip"
android:paddingRight="10dip"
android:text="@string/confirm_mobile_no_continue"
android:textColor="@color/white"
android:textStyle="bold"
android:translateY="-16dp" />
Shubham answered 2019-10-05T01:58:03Z
3 votes
我认为最好的方法是设置:
<...>
android:layout_alignParentBottom="true" />
然后在Java代码后面:
Button confirm_mobile_button_next = (Button)findViewById(R.id.confirm_mobile_button_next)
confirm_mobile_button_next.setTransitionY(-THE_VALUE) or setTransitionX(-THE_VALUE)
sadegh saati answered 2019-10-05T01:58:34Z
3 votes
以下是@franny zhao建议的唯一工作解决方案。
android:layout_width="match_parent"
android:layout_height="wrap_content">
android:id="@+id/fl_layout"
android:layout_alignParentBottom="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
android:id="@+id/tv_layout"
android:text="hello world"
android:layout_marginBottom="50dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

如果您按照其他人的建议将填充添加到底部对齐的视图中,则视图背景也会扩展。 如果您有彩色背景,则视图将看起来像被粘在底部。 填充和边距完全不同,填充是视图的一部分,但边距在视图之间留有空间。

Satheesh answered 2019-10-05T01:59:06Z

2 votes

我认为最好的方法是在XML中设置android:layout_alignParentBottom然后在Java代码后面:

Button confirm_mobile_button_next = (Button)findViewById(R.id.confirm_mobile_button_next)

confirm_mobile_button_next.setTransitionY(-THE_VALUE) or setTransitionX(-THE_VALUE)

sadegh saati answered 2019-10-05T01:59:32Z

1 votes

由于我偶然发现了这个问题,并且没有找到适合我的情况的答案,因此我开始思考了半秒钟,并通过在RelativeLayout示例内部的视图上设置负边距来解决了这个问题:

android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_marginTop="-8dp"
android:layout_marginStart="-8dp">
这对某些人来说应该很有用。
Mathijs Segers answered 2019-10-05T02:00:04Z
1 votes
您可以使用ViewGroup(例如FrameLayout或LinearLayout)包装视图。 在外部ViewGroup中设置alignParentBottom,然后marginBottom可以在内部View中工作。
android:layout_width="match_parent"
android:layout_height="wrap_content">
android:id="@+id/fl_layout"
android:layout_alignParentBottom="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
android:id="@+id/tv_layout"
android:text="hello world"
android:layout_marginBottom="50dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
franny zhao answered 2019-10-05T02:00:29Z
-1 votes
以这种方式尝试:
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="17dp"
android:text="Button" />
RajeshVijayakumar answered 2019-10-05T02:00:53Z
-3 votes
这是另一种选择。 如果要设置孩子的边距而不是父母的边距,则应将android:layout_marginTop的值设置为所需边距的两倍,然后将android:layout_centerVertical设置为true。 给上边距两倍的期望值以补偿下边距。 这样,子视图的顶部和底部边距将相等。
android:id="@+id/confirm_mobile_button_next"
android:layout_width="fill_parent"
android:layout_height="40dip"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="false"
android:layout_centerVertical="true"
android:layout_centerInParent="false"
android:layout_marginLeft="15dp"
android:layout_marginRight="15dp"
android:layout_marginTop="30dp"
android:background="@drawable/button_shape_selector"
android:paddingLeft="10dip"
android:paddingRight="10dip"
android:text="@string/confirm_mobile_no_continue"
android:textColor="@color/white"
android:textStyle="bold" />
它将给您相同的结果。
pram answered 2019-10-05T02:01:26Z