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.

Спасибо!

26
задан DannyA 25 October 2011 в 12:53
поделиться

2 ответа

у вас есть 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!"/>

Или вы можете центрировать свой вид и использовать позиционирование с помощью pading por (вы должны удвоить используемый отступ, потому что он переполняется ниже центра экрана)

 <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!"/>
59
ответ дан 28 November 2019 в 06:43
поделиться

Я только что начал программировать на 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 цента!

0
ответ дан 28 November 2019 в 06:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: