Подтвердить что ты не робот

Как я могу выровнять элемент справа в FrameLayout?

У меня есть FrameLayout, который содержит 2 представления, второй - что-то вроде Close Button (X), и я хочу поместить его справа.

Я пробовал layout_gravity = "right", но это не сработало.

Это мой макет xml:

<FrameLayout android:layout_width="320dp"
    android:layout_height="wrap_content"
    android:id="@+id/layoutSmallImg">

    <ImageView android:id="@+id/bigImage"
        android:layout_width="320dp" android:layout_height="wrap_content"/>

    <ImageView android:id="@+id/bigImage"
        android:layout_width="320dp" android:layout_height="wrap_content"/>

    <ImageButton android:id="@+id/closebutton"
        android:background="@android:color/transparent"
        android:layout_height="30dp" android:layout_marginTop="10dp"
        android:layout_alignParentRight="true"
        android:layout_width="30dp" android:paddingLeft="40dp"
        android:visibility="gone" 
        android:src="@drawable/close" />
</FrameLayout>
4b9b3361

Ответ 1

Вместо этого я рекомендую использовать RelativeLayout

FrameLayout предназначен для блокировки области на экране, чтобы отобразить один элемент. Вы можете добавить несколько детей в FrameLayout и управлять своим положением в FrameLayout с помощью силы тяжести. Дети нарисованы в стеке, с последним добавленным ребенком сверху. Размер макета кадра - это размер его самого большого дочернего элемента (плюс заполнение), видимый или нет (если разрешен родитель FrameLayout). Представления GONE используются для калибровки только в том случае, если для параметра setConsiderGoneChildrenWhenMeasuring() установлено значение true.

Кстати, вам нужна кнопка поверх ImageView или рядом с ней? Вы устанавливаете ширину как макета, так и imageView одинакового размера.


После комментария я вижу два варианта:

Ответ 2

Прочитайте DOCS:

FrameLayout предназначен для блокировки области на экране для отображения один элемент. Как правило, FrameLayout следует использовать для child view, потому что может быть сложно организовать детские представления в способ, который масштабируется до разных размеров экрана без детей перекрывая друг друга. Однако вы можете добавить нескольких детей к FrameLayout и контролировать их положение в FrameLayout присваивая тяжести каждому ребенку, используя андроид: layout_gravity атрибут.

Try:

<TextView
     .....
     android:layout_gravity="right" />

Вы можете разместить представление в 9 разных местах в FrameLayout

Enjoy

Ответ 3

Просто поместите свои элементы внутри FrameLayout во второй RelativeLayout. И используйте android: layout_alignParentRight = "true" для элемента, который вы хотите выровнять правильно.

<FrameLayout android:layout_width="320dp" android:layout_height="wrap_content" 
                                      android:id="@+id/layoutSmallImg">
 <RelativeLayout
            android:id="@+id/content"
            android:layout_width="match_parent"
            android:layout_height="match_parent" >
    <ImageView android:id="@+id/bigImage"
            android:layout_width="320dp" 
            android:layout_height="wrap_content"/>

    <ImageButton android:id="@+id/closebutton"
            android:background="@android:color/transparent"
            android:layout_height="30dp" android:layout_marginTop="10dp"
            android:layout_alignParentRight="true"
            android:layout_width="30dp" android:paddingLeft="40dp"
            android:visibility="gone" 
            android:src="@drawable/close" />
  </RelativeLayout>
</FrameLayout>

Ответ 5

Программно, вы можете установить маржу с помощью FrameLayout.LayoutParams. В нижней части экрана будет показано следующее:

int desired_height_of_content = //whatever your want the height of your view to be
FrameLayout layout = new FrameLayout(this);
FrameLayout.LayoutParams flp = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, desired_height_of_content);
int difference = screen_height - desired_height_of_content
flp.setMargins(difference, 0, 0, 0);
layout.addView(your_view, flp);

Ответ 6

Вы хотите использовать FrameLayout или RelativeLayout?

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