Как я могу выровнять элемент справа в 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>
Ответы
Ответ 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>
Ответ 4
Используйте RelativeLayout.
Ответ 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.