Android: выровнять родительское дно + нижний край
я использовал относительный макет, и я хочу установить кнопку в нижней части экрана, однако это ставит все это на дно, и я хотел бы иметь некоторый запас, чтобы между концом экрана/просмотра и кнопкой было некоторое пространство. Однако все, что я делаю, поле кнопки просто ничего не делает на 2.1+ По какой-то причине. Относительный макет содержит фон, поэтому я не могу, но маржа на этом.
кто-нибудь знает как исправить этот?
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="0dp"
android:background="@drawable/background" >
<Button
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" />
</RelativeLayout>
10 ответов:
вы можете просто добавить дополнение к RelativeLayout вместо поля для кнопки, например
android:paddingBottom="15dp"
.В общем, я всегда тестирую свой макет в exclipse preview с помощью настройки API Level 8. Это дает довольно точные результаты для большинства устройств, включая ICS и JB.
другое, что вы можете сделать, это поставить
View
это выровнено по нижней частиRelativeLayout
, и установите его высоту на нижний край, который вы хотите использовать (или просто укажите значение дляlayout_marginBottom
) вот так:<RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content" > <ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:src="@drawable/some_image" android:adjustViewBounds="true" /> <TextView 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" /> <View android:id = "@+id/empty_view" android:layout_height = "30dip" android:layout_width = "match_parent" android:visibility="invisible" android:layout_alignParentBottom="true" /> </RelativeLayout>
этот пример заполняет
RelativeLayout
СImageView
, и позиции aTextView
наImageView
.
Yu может использовать атрибут translateY
translateY="-16dp"
код
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginBottom="0dp" android:background="@drawable/background"> <Button 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" /> </RelativeLayout>
Я думаю, что лучший способ-установить android: layout_alignParentBottom в XML затем в 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)
Я думаю, лучший способ-это установить:
<... 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)
поскольку я наткнулся на эту проблему и не увидел ответов, подходящих к моей ситуации, я начал думать на полсекунды и решил ее, установив отрицательный запас на вид внутри образца RelativeLayout:
<RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:layout_width="48dp" android:layout_height="48dp" android:layout_marginTop="-8dp" android:layout_marginStart="-8dp"> </RelativeLayout>
Это должно оказаться полезным для некоторых людей.
вы можете использовать ViewGroup(например, FrameLayout или LinearLayout), чтобы обернуть представление. Установите alignParentBottom в группе внешнего вида, затем marginBottom может работать во внутреннем виде.
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <FrameLayout android:id="@+id/fl_layout" android:layout_alignParentBottom="true" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:id="@+id/tv_layout" android:text="hello world" android:layout_marginBottom="50dp" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </FrameLayout> </RelativeLayout>
ниже приведено только рабочее решение, предложенное @franny zhao.
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <FrameLayout android:id="@+id/fl_layout" android:layout_alignParentBottom="true" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:id="@+id/tv_layout" android:text="hello world" android:layout_marginBottom="50dp" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </FrameLayout> </RelativeLayout>
Если вы добавите отступ к нижнему выровненному виду, как это было предложено другими, фон представления также расширится. Если у вас есть цветной фон, то вид будет выглядеть так, как будто он приклеен к нижней части. Заполнение и поле полностью отличаются, заполнение является частью представления, но поле оставляет пространство между представлениями.
попробуйте таким образом:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" > <Button 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" />
вот еще один вариант. Если вы хотите установить поле ребенка вместо родительского заполнения, вы должны установить значение
android:layout_marginTop
удвоить желаемое поле, а затем установитьandroid:layout_centerVertical
в true. Верхняя маржа получает двойное желаемое значение для компенсации нижней маржи. Таким образом, у вас будет равное верхнее и нижнее поле вокруг дочернего представления.
<Button 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" />
Это даст вам тот же результат.