Макет Android не выровнен по верху

#android #android-layout #imageview

Вопрос:

У меня есть RelativeLayout то, что в данный момент содержит ImageView то, что я хотел бы выровнять в правом верхнем углу экрана, а затем еще ImageView одно в левом верхнем углу. Однако на данный момент то, RelativeLayout что предназначено для их хранения, по какой-то причине не выровнено по верхней части экрана.

У меня есть следующее:

 <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="#a6c"
    android:padding="16dp"
    android:gravity="bottom"
    android:id="@ id/frontFragment"
    >

    <TextView
        android:id="@ id/frontText"
        style="?android:textAppearanceLarge"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="0"
        android:duplicateParentState="true"
        android:gravity="center"
        android:textStyle="bold" />

    <RelativeLayout 
        android:layout_width="fill_parent"
        android:layout_height="45dip"
        android:layout_gravity="top">

        <ImageView
            android:id="@ id/infoIcon"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true" issue here
            android:src="@drawable/info" />

    </RelativeLayout>

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="45dip"
        xmlns:android="http://schemas.android.com/apk/res/android">

        <TextView
            android:id="@ id/frontDate"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:text="some value"
            android:layout_alignParentBottom="true"/>

        <TextView
            android:id="@ id/frontCount"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:text="another value"
            android:layout_alignParentBottom="true"/>

    </RelativeLayout>

</LinearLayout>
 

но результат выглядит следующим образом

введите описание изображения здесь

Комментарии:

1. Если вы хотите расположить изображения рядом друг с другом, вы можете использовать сетку или сетку с количеством строк и столбцов

2. вы LinearLayout должны android:gravity="bottom" использовать better ConstraintLayout вместо LinearLayout и RelativeLayout, чтобы получить ваш подход

3. Я думаю, что ConstraintLayout намного проще в использовании, чем RelativeLayout. Я знаю, что это не ответ на вопрос, но я думаю, что вам нужно попробовать. Google рекомендует это сделать.

4. Вверху у вас есть текстовое представление frontText.

5. В вашем информационном изображении src есть дополнительное место справа и слева. вы можете увидеть макет представления изображения, щелкнув по изображению, и вы зададите содержимое обертки как ширину, поэтому я считаю, что если вы установите правильный src изображения, он будет работать .в вашем коде нет ничего плохого.

Ответ №1:

Как указывалось в комментариях, с ConstraintLayout помощью вы можете сделать это проще, не вкладывая макеты.

Как показано ниже, просто замените свой контент(значки/текст):

 <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorPrimary">


    <ImageView
        android:id="@ id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:srcCompat="@drawable/home_selected" />

    <ImageView
        android:id="@ id/imageView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:srcCompat="@drawable/ic_add" />

    <TextView
        android:id="@ id/frontDate"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_marginStart="8dp"
        android:layout_marginBottom="8dp"
        android:text="some value"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

    <TextView
        android:id="@ id/frontCount"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentBottom="true"
        android:layout_marginEnd="8dp"
        android:layout_marginBottom="8dp"
        android:text="another value"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>
 

Ниже приведен результат:

Ограничение

Комментарии:

1. просто хочу отметить, что в конце концов мне также пришлось перейти с app:srcccompat=»@drawable/ic_add» на android:src=»@drawable/ic_add», чтобы изображение действительно отображалось на устройстве при запуске.

Ответ №2:

Удалить android:гравитация=»снизу» из линейной компоновки

 <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="#a6c"
    android:padding="16dp"
    android:gravity="bottom"
    android:id="@ id/frontFragment"
    >
 

Для :

 <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="#a6c"
    android:padding="16dp"
    android:id="@ id/frontFragment"
    >
 

Комментарии:

1. спасибо, на самом деле это одно из изменений, которые мне пришлось внести, но теперь нижние текстовые просмотры полностью исчезли.

2. можете ли вы опубликовать результат, который вы хотите. похоже, вы все еще новичок в том, как работают XML-макеты в Android studio. вероятно, вам не хватает некоторых ограничений, таких как «макет:вес».