Android: Вирівняти кнопку праворуч внизу екрана за допомогою FrameLayout?


106

Я намагаюся поставити елементи масштабування карти в нижньому правому куті екрана. Я міг би це зробити з RelativeLayout, використовуючи і alignParentBottom="true"та alignParentRight="true", і з Framelayout, я не знайшов таких атрибутів. Як вирівняти його в нижньому правому куті екрана?

Відповіді:


252

Насправді це можливо, незважаючи на те, що сказано в інших відповідях. Якщо у вас є FrameLayoutі хочете розташувати дочірній предмет донизу, ви можете використовувати його, android:layout_gravity="bottom"і це буде вирівняти цю дитину в нижній частині FrameLayout.

Я знаю, що це працює, тому що я його використовую. Я знаю, що пізно, але це може стати в нагоді іншим, оскільки це місце займає чільні позиції в google


7
Привіт, byte1918, якщо ви вважаєте, що це не є правильною відповіддю на питання, яке ви більш ніж вітаємо, - і я думаю, що було б корисно для всіх - якщо ви опублікували правильне рішення. Або поясніть хоча б те, що робить це неправильною відповіддю. Дякую.
lblasa

33
Для вирівнювання праворуч можна використовувати android: layout_gravity = "знизу | праворуч"
Marcin Raczkowski,

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

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 масштабується на весь екран.
Юра Шинкарев

15

Налаштування android:layout_gravity="bottom|right"працювало на мене


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

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

Це насправді наполовину правильно. Те, що просить ОП, є досяжним, але з обмеженим оглядом курсу, як ви вже згадували. Але сказати, що це "недосяжно" було б неправильним!
sud007
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.