Android - Как мне расположить виды со смещением относительно центра / верха / низа (и т. Д.) Их родителя? - PullRequest
26 голосов
/ 25 октября 2011

У меня есть 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.

Спасибо!

Ответы [ 2 ]

59 голосов
/ 24 сентября 2012

у вас есть 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!"/>
0 голосов
/ 24 августа 2016

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...