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> 

Solutions Collecting From Web of "Android: выровнять исходный снизу + нижний край"

Вы можете просто добавить дополнение к RelativeLayout вместо поля к Button, например, android:paddingBottom="15dp" .

В общем, я всегда проверяю свой макет в предварительном просмотре Exclipse с использованием параметра API уровня 8. Это дает довольно точные результаты для большинства устройств, включая ICS и JB.

Другая вещь, которую вы можете сделать, это поместить представление, которое выровнено в нижней части 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 и позиционирует TextView поверх ImageView .

Ю. может использовать атрибут 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) 

Поскольку я наткнулся на эту проблему и не видел ответов, подходящих для моей ситуации, я начал думать за полсекунды и разрешил ее, установив отрицательный запас на вид внутри образца 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> 

Это должно оказаться полезным для некоторых людей.

Я думаю, что лучший способ – установить:

 <... 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) 

Вы можете использовать ViewGroup (например, FrameLayout или LinearLayout), чтобы обернуть представление. Установите alignParentBottom во внешнюю ViewGroup, затем 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_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" /> 

Это даст вам тот же результат.