Android. Как разместить позиции в смещении относительно центра/верхней/нижней (и т.д.) Их родителя?
У меня есть RelativeLayout
с представлениями, выровненными относительно него (их родителями), используя (например):
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT);
textView.setLayoutParams(layoutParams);
и теперь мне интересно, как я могу позиционировать представление относительно нижней части его родительского элемента, но со смещением (например, 100 пикселей над дном, 20 пикселей слева и т.д.) или аналогично центру ( 30 пикселей в центре)?
![schematic image of the necessary layout]()
Я попытался установить поля представления (например):
layoutParams.setMargins(140, 0, 0, 0);
перед тем, как применить его к textView
, но это не сработало.
Похоже, это очень полезный способ выравнивания представлений для разных размеров экрана.
Мне важно добиться этого в коде, не используя xmls.
Спасибо!
Ответы
Ответ 1
у вас есть 2 способа, в пушнинах используется якорный пустой вид, расположенный в центре.
<View
android:id="@+id/anchor"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_centerInParent="true" />
<TextView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@id/anchor"
android:layout_marginBottom="20dp"
android:text="hello world!"/>
Или вы можете центрировать свое представление и использовать позиционное позиционирование (вы должны удвоить заполнение, потому что оно переполняется ниже центра экрана)
<TextView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:paddingBottom="40dp"
android:text="hello world!"/>
Ответ 2
Я только начал программировать Android сегодня, так что это может быть старым или плохой идеей... но я перебирал вышеупомянутый ответ и обнаружил, что позиционирование элемента под другим моим элементом вызывает проблему - либо заполнение будет в путь или что-то в этом роде. Вот что я сделал.
Используя метод привязки, я также дал якорю высоту (вдвое больше, чем вам нужно), а затем выровнял элемент с вершиной. Таким образом, это будет в середине представления минус половина высоты якоря!
<View
android:id="@+id/anchor"
android:layout_width="0dp"
android:layout_height="200dp"
android:layout_centerInParent="true" />
<TextView
android:id="@+id/heading"
android:text="@string/heading"
android:textColor="@android:color/white"
android:textSize="24sp"
android:layout_alignTop="@id/anchor"
android:layout_centerHorizontal="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/subheading"
android:text="@string/subheading"
android:textColor="@android:color/white"
android:textSize="12sp"
android:layout_below="@+id/heading"
android:layout_centerHorizontal="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
Другой ответ очень помог, но я просто хотел дать свои 2 цента!