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.