Как установить textview друг под другом в linearlayout

Что я хочу, так это то, что у меня может быть 1 ImageView слева, а рядом с изображением 2 текстовых изображения друг под другом. Я не могу получить второе текстовое представление под текстовым представлением.

<?xml version = "1.0" encoding = "utf-8"?>

<LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"
xmlns:tools = "http://schemas.android.com/tools"
android:orientation = "horizontal"
android:layout_width = "match_parent"
android:layout_height = "wrap_content">

<ImageView
    android:id = "@+id/displayImage"
    android:layout_width = "67dp"
    android:layout_height = "100dp"
    android:layout_gravity = "left"
    android:layout_weight = "1" />

<TextView
    android:id = "@+id/textview_name"
    android:layout_width = "40dp"
    android:layout_height = "wrap_content"
    android:layout_gravity = "top"
    android:layout_weight = "2"
    android:paddingLeft = "10dp"
    android:paddingTop = "10dp"
    android:paddingBottom = "3dp"
    android:textColor = "@color/colorPrimaryDark"
    android:textSize = "20sp"

    android:textStyle = "bold" />

<TextView
    android:id = "@+id/textview_description"
    android:layout_width = "55dp"
    android:layout_height = "wrap_content"
    android:layout_gravity = "bottom"
    android:layout_weight = "2"
    android:gravity = "left"
    android:paddingLeft = "10dp"
    android:paddingTop = "10dp"
    android:paddingBottom = "3dp"
    android:textSize = "20sp" />
</LinearLayout>

Результат выглядит сейчас: Результат

Ожидаемый результат

0
0
331
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вы можете использовать что-то вроде ниже:

<LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"
    android:layout_width = "match_parent"
    android:layout_height = "wrap_content"
    android:orientation = "horizontal">

    <ImageView
        android:id = "@+id/displayImage"
        android:layout_width = "67dp"
        android:layout_height = "100dp"
        android:src = "@color/colorPrimaryDark" />

    <LinearLayout
        android:layout_width = "0dp"
        android:layout_height = "wrap_content"
        android:layout_gravity = "center"
        android:layout_weight = "1"
        android:orientation = "vertical">

        <TextView
            android:id = "@+id/textview_name"
            android:layout_width = "match_parent"
            android:layout_height = "wrap_content"
            android:paddingLeft = "10dp"
            android:paddingTop = "10dp"
            android:paddingBottom = "3dp"
            android:text = "Left text"
            android:textColor = "@color/colorPrimaryDark"
            android:textStyle = "bold" />

        <TextView
            android:id = "@+id/textview_description"
            android:layout_width = "match_parent"
            android:layout_height = "wrap_content"
            android:layout_gravity = "bottom"
            android:paddingLeft = "10dp"
            android:paddingTop = "10dp"
            android:paddingBottom = "3dp"
            android:text = "Right text" />
    </LinearLayout>
</LinearLayout>

Вы можете вкладывать контейнеры, такие как LinearLayout, RelativeLayout, FrameLayout и т. д., друг в друга, чтобы создавать сложные макеты.

Кроме того, я бы посоветовал узнать, что делает каждый тег, погуглив их, прежде чем использовать их ненадлежащим образом где-либо внутри вашего макета. Мне потребовалось целых 5 минут, чтобы исправить ваш макет, потому что вы добавили layout_weight практически везде, где хотели!

У меня есть еще 1 вопрос: когда я добавляю marginTop, он меняет нижнее поле, а когда я набираю marginBottom, он все еще меняет нижнее поле. Почему я не могу изменить верхнее поле?

DoingGreat 10.06.2019 21:54

Мне нужно посмотреть, в чем проблема и где вы пытаетесь применить маржу. Извините за поздний ответ, я не получил уведомление о вашем комментарии. Если у вас все еще есть эта проблема, не забудьте отметить меня, когда вы комментируете. @Хорошо справляться

Vedprakash Wagh 01.07.2019 23:04

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

Вот структура

<LinearLayout> - horizontal orientation
<Imageview/>
<LinearLayout> - vertical orientation
<Textview/>
<Textview/>
</LinearLayout> - vertical orientation
</LinearLayout> - horizontal orientation.

Вы установили ориентацию линейного макета как горизонтальную. Это приведет к тому, что все дочерние элементы (в вашем случае ImageView, имя TextView и описание TextView) будут расположены горизонтально рядом друг с другом.

Есть много способов сделать это. 1 способ добиться этого - использовать RelativeLayout, а затем вы можете использовать

android:layout_toBottomOf = "@id/textview_name"

чтобы текстовое представление описания было ниже текстового представления имени.

Для просмотра изображения вы можете использовать свойство

android:layout_alignParentLeft = "true"

чтобы вид изображения придерживался левой границы. Пожалуйста, поэкспериментируйте с RelativeLayout, чтобы получить желаемый результат.

Пожалуйста, используйте эту лабораторию кода от Google, чтобы использовать ContraintLayout. https://codelabs.developers.google.com/codelabs/constraint-layout/index.html#0

Другие вопросы по теме