Android: выровнять кнопку по нижнему правому краю экрана с помощью FrameLayout?


106

Я пытаюсь разместить элементы управления масштабированием карты в правом нижнем углу экрана. Я мог бы сделать это с помощью RelativeLayout, используя оба alignParentBottom="true"и alignParentRight="true", но с Framelayout я не нашел таких атрибутов. Как мне выровнять его по нижнему правому краю экрана?

Ответы:


252

На самом деле это возможно, несмотря на то, что сказано в других ответах. Если у вас есть элемент FrameLayout, и вы хотите разместить дочерний элемент внизу, вы можете использовать, android:layout_gravity="bottom"и это выровняет этот дочерний элемент по нижней части FrameLayout.

Я знаю, что это работает, потому что пользуюсь им. Я знаю, что уже поздно, но это может пригодиться другим, так как это занимает лидирующие позиции в Google


7
Привет, byte1918, если вы считаете, что это неправильный ответ на вопрос, пожалуйста, и я думаю, что это будет полезно для всех, если вы опубликуете правильное решение. Или хотя бы объясните, почему это неправильный ответ. Спасибо.
— lblasa

33
Чтобы выровнять нижний правый угол, вы можете использовать android: layout_gravity = "bottom | right"
— Марцин Рачковски

1
если это не сразу отражается в превью, попробуйте установить его на вкладке дизайна. обычно работает,
— yUdoDis

Я пробовал это с Textview, и это не работает
— The Only Smart Boy

51

Я тоже столкнулся с этой ситуацией и понял, как это сделать с помощью FrameLayout. Следующий вывод создается с помощью кода, приведенного ниже.

Некоторый текст с выравниванием по правому краю отображается поверх изображения с помощью FrameLayout.

              <FrameLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content" >

                    <ImageView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:src="@drawable/contactbook_icon"
                        android:layout_gravity="center" />

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="140"
                        android:textSize="12dp"
                        android:textColor="#FFFFFF"
                        android:layout_gravity="bottom|right"
                        android:layout_margin="15dp" />
                </FrameLayout>

Измените значение поля, чтобы отрегулировать положение текста на изображении. Удаление поля может иногда привести к тому, что текст будет выходить из поля зрения.


лучший ответ ... спасибо, разгадал давнюю загадку.
— YvesLeBorg 08

38

Этого можно добиться с помощью RelativeLayout

<RelativeLayout 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

   <ImageView 
      android:src="@drawable/icon"
      android:layout_height="wrap_content"
      android:layout_width="wrap_content"
      android:layout_alignParentRight="true"
      android:layout_alignParentBottom="true" />

</RelativeLayout>

1
Это не работает, если использовать wrap_contentв RelativeLayout. Потому что тогда RelativeLayout все равно масштабируется на весь экран.
— Юра Шинкарев


9

Это можно сделать двумя способами:

1) Использование макета кадра

android:layout_gravity="bottom|right"

2) Использование относительного макета

android:layout_alignParentRight="true"
android:layout_alignParentBottom="true" 


3

Если вы хотите попробовать с java-кодом. Ну вот -

    final LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, 
                                             LayoutParams.WRAP_CONTENT);
    yourView.setLayoutParams(params);
    params.gravity = Gravity.BOTTOM; // set gravity

именно то, что я хочу. Небольшое дополнение - LayoutParams должен быть из FrameLayout.LayoutParams. И если вы хотите, чтобы это было в правом нижнем углу, используйте: params.gravity = Gravity.BOTTOM | Gravity.RIGHT;
— SajithK 07

2

вы можете добавить невидимый TextView в FrameLayout.

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:visibility="invisible"
        />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:orientation="horizontal">
        <Button
            android:id="@+id/daily_delete_btn"
            android:layout_width="0dp"
            android:layout_height="50dp"
            android:layout_weight="1"
            android:text="DELETE"
            android:layout_gravity="center"/>
        <Button
            android:id="@+id/daily_save_btn"
            android:layout_width="0dp"
            android:layout_height="50dp"
            android:layout_weight="1"
            android:text="SAVE"
            android:layout_gravity="center"/>
    </LinearLayout>


0

Есть много способов сделать это с помощью виджета ограничения на странице activity.xml студии android.

Два наиболее распространенных метода:

  1. Выберите вид кнопок и отрегулируйте поля.
  2. Перейдите в «Все атрибуты», затем в «layout_constraints», затем выберите
    • layout_constraintBottom_toBottomOf_parent
    • layout_constraintRight_toRightOf_parent

-3

Вы не можете этого сделать с FrameLayout.

Из спецификации:

http://developer.android.com/reference/android/widget/FrameLayout.html

«FrameLayout предназначен для блокировки области на экране для отображения одного элемента. Вы можете добавить несколько дочерних элементов к FrameLayout, но все дочерние элементы привязаны к левому верхнему углу экрана».

Почему бы не использовать RelativeLayout?


Я хочу, чтобы список отображался слева, перекрывая карту. О, это возможно с RelativeLayout, не так ли? Хорошо, спасибо.
— Рохит Нандакумар

1
«но все дочерние элементы привязаны к верхнему левому углу экрана» - не обязательно к верхнему краю экрана, вы можете выровнять его по правому, нижнему и т. д. правому краю?
— Рохит Нандакумар

Да, это возможно с RelativeLayout. Вы можете размещать виды друг на друге.
— Juhani

На самом деле это наполовину правильно. То, что спрашивает OP, достижимо, но, конечно, с ограниченным обзором, как вы упомянули. Но было бы неправильно говорить, что это «недостижимо»!
— sud007
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.