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

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.

Спасибо!

4b9b3361

Ответ 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 цента!