RelativeView застрял в верхней части макета - PullRequest
0 голосов
/ 15 января 2019

Я пытаюсь разместить ImageView внутри моего RelativeLayout, который расположен примерно на 3/4 вниз по экрану, но как только я добавлю ImageView к RelativeLayout, макет и изображение привязываются к верхней части экрана и Я не уверен, как оттуда его перенести.

Так выглядит каждый раз, когда я добавляю ImageView к RelativeLayout

enter image description here

Но я хочу, чтобы он располагался чуть выше кнопки «Готово»

Это .xml

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="74dp"
    android:orientation="vertical"
    app:layout_constraintBottom_toTopOf="@+id/readyButton"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent">


    <ImageView
        android:id="@+id/player1FlipAvatar"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:contentDescription="@string/title_activity_flip_coin_lobby"
        tools:ignore="ContentDescription"
        tools:layout_editor_absoluteX="55dp"
        tools:layout_editor_absoluteY="40dp"
        tools:src="@drawable/defaultavatarmale" />
</RelativeLayout>

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Это происходит потому, что вы недостаточно хорошо понимаете RelativeLayout.

Все виды, размещенные внутри RelativeLayout, будут автоматически размещены друг над другом в верхнем левом углу RelativeLayout.

Если вы хотите переместить его, вам нужно «выровнять» его.

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="74dp"
    android:orientation="vertical"
    app:layout_constraintBottom_toTopOf="@+id/readyButton"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent">


    <ImageView
        android:id="@+id/player1FlipAvatar"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:layout_alignParentBottom="true"
        android:contentDescription="@string/title_activity_flip_coin_lobby"
        tools:ignore="ContentDescription"
        tools:layout_editor_absoluteX="55dp"
        tools:layout_editor_absoluteY="40dp"
        tools:src="@drawable/defaultavatarmale" />
</RelativeLayout>

Выровняв ImageView к нижней части RelativeLayout, он должен быть размещен над кнопкой «Готово», ЕСЛИ ваш RelativeLayout заканчивается прямо над кнопкой «Готово».

Если вы хотите центрировать ImageView, вы можете добавить android:layout_centerHorizontal="true".

Вы можете узнать больше о RelativeLayout здесь: https://developer.android.com/guide/topics/ui/layout/relative

Однако в вашем xml-коде есть две любопытные вещи.

  1. Почему вы помещаете ImageView высотой 80dp в RelativeLayout высотой 74dp? Это в основном намеренно ищет проблемы.

  2. Почему вы используете RelativeLayout, если вы уже используете ConstraintLayout? Одним из основных преимуществ использования ConstraintLayout является то, что вам не нужно использовать вложенные макеты. С мощью и контролем ConstraintLayout, вы можете фактически переставить почти все виды в любой дизайн, не вкладывая в него другой макет, такой как RelativeLayout.

Я просто предполагаю, что вы используете ConstraintLayout, потому что вы использовали app:layout_constraintStart_toStartOf в RelativeLayout, и эти типы «ограничений» существуют только для ConstraintLayout.

Так что, если вы уже используете ConstraintLayout и ваша кнопка Ready находится внутри ConstraintLayout, вам просто нужно сделать:

<ImageView
        android:id="@+id/player1FlipAvatar"
        android:layout_width="80dp"
        android:layout_height="80dp"
        app:layout_constraintBottom_toTopOf="@+id/readyButton"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        android:contentDescription="@string/title_activity_flip_coin_lobby"
        tools:ignore="ContentDescription"
        tools:layout_editor_absoluteX="55dp"
        tools:layout_editor_absoluteY="40dp"
        tools:src="@drawable/defaultavatarmale" />

Вам не нужен RelativeLayout, чтобы поместить ImageView над кнопкой Ready.

0 голосов
/ 15 января 2019

оберните relative layout и button с linear layout ориентацией по вертикали и отрегулируйте гравитацию, как вам нравится

 <LinearLayout
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:gravity="bottom"
       android:orientation="vertical">
   <RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="74dp"
    android:orientation="vertical"
    app:layout_constraintBottom_toTopOf="@+id/readyButton"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent">


    <ImageView
        android:id="@+id/player1FlipAvatar"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:contentDescription="@string/title_activity_flip_coin_lobby"
        tools:ignore="ContentDescription"
        tools:layout_editor_absoluteX="55dp"
        tools:layout_editor_absoluteY="40dp"
        tools:src="@drawable/defaultavatarmale" />
    </RelativeLayout>
 </LinearLayout>
...