Невозможно выровнять элементы в линейном макете - PullRequest
0 голосов
/ 24 мая 2019

В моем приложении у меня есть RecyclerView item.xml, здесь я пытаюсь выровнять все элементы с линейной разметкой, но здесь проблема в том, что когда я устанавливаю ширину TextView в wrap_content, если текст слишком великбольшой, он выталкивает другие элементы внутри макета и делает их иногда слишком маленькими, а иногда они полностью выталкиваются из макета. Вот мой XML-код, который я использую, любая помощь будет принята с благодарностью.

<android.support.constraint.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_marginTop="8dp"
    android:layout_marginBottom="8dp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <LinearLayout
        android:id="@+id/songitemly"
        android:weightSum="100"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        >

        <ImageView
            android:id="@+id/imgscov"
            android:layout_width="45dp"
            android:layout_height="45dp"
            android:layout_marginLeft="15dp"
            android:scaleType="fitXY"
            android:layout_marginTop="5dp"
            android:layout_marginRight="5dp"
            android:layout_marginBottom="5dp" />
<LinearLayout
    android:layout_width="wrap_content"
    android:orientation="vertical"
    android:layout_height="wrap_content">
        <TextView
            android:id="@+id/sname"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@+id/imgscov"
            android:gravity="center"
            android:singleLine="true"
            android:textColor="#FCFAFA"
            android:textSize="16dp" />
    <TextView
        android:id="@+id/sartist"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:singleLine="true"
        android:textColor="#D3D1D1"
        tools:ignore="MissingConstraints" />
    </LinearLayout>

        <com.airbnb.lottie.LottieAnimationView
            android:id="@+id/playinganim"
            android:layout_marginTop="5dp"
            android:layout_width="25dp"
            android:layout_weight="20"
            android:visibility="invisible"
            app:lottie_autoPlay="true"
            app:lottie_loop="true"
            app:lottie_fileName="playing.json"
            android:layout_marginLeft="5dp"
            android:layout_marginRight="10dp"
            android:layout_toRightOf="@id/sname"
            android:layout_height="25dp"
            />
        <ImageView
            android:id="@+id/imgmenu"
            android:layout_marginTop="5dp"
            android:layout_weight="10"
            android:layout_marginLeft="5dp"
            android:layout_marginRight="10dp"
            android:layout_toRightOf="@+id/playinganim"
            android:src="@drawable/ic_dots_vertical_black_48dp"
            android:layout_width="25dp"
            android:layout_height="25dp" />
    </LinearLayout>

</android.support.constraint.ConstraintLayout>

Снимок экрана с видом переработчика

Это мой код после установки ширины и высоты 0dp:

<LinearLayout
        android:id="@+id/songitemly"
        android:weightSum="100"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        tools:ignore="MissingConstraints">

        <ImageView
            android:id="@+id/imgscov"
            android:layout_width="45dp"
            android:layout_height="45dp"
            android:layout_marginLeft="15dp"
            android:scaleType="fitXY"
            android:layout_marginTop="5dp"
            android:layout_marginRight="5dp"
            android:layout_marginBottom="5dp" />
<LinearLayout
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:layout_height="0dp">
        <TextView
            android:id="@+id/sname"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:gravity="center"
            android:singleLine="true"
            android:ellipsize="end"
            android:maxLines="1"
            android:textColor="#FCFAFA"
            android:textSize="16dp" />
    <TextView
        android:id="@+id/sartist"
        android:layout_width="wrap_content"
        android:ellipsize="end"
        android:maxLines="1"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:singleLine="true"
        android:textColor="#D3D1D1"
        tools:ignore="MissingConstraints" />
    </LinearLayout>

        <com.airbnb.lottie.LottieAnimationView
            android:id="@+id/playinganim"
            android:layout_marginTop="5dp"
            android:layout_width="25dp"
            android:layout_weight="20"
            android:visibility="invisible"
            app:lottie_autoPlay="true"
            app:lottie_loop="true"
            app:lottie_fileName="playing.json"
            android:layout_marginLeft="5dp"
            android:layout_marginRight="10dp"
            android:layout_toRightOf="@id/sname"
            android:layout_height="25dp"
            />
        <ImageView
            android:id="@+id/imgmenu"
            android:layout_marginTop="5dp"
            android:layout_weight="10"
            android:layout_marginLeft="5dp"
            android:layout_marginRight="10dp"
            android:layout_toRightOf="@+id/playinganim"
            android:src="@drawable/ic_dots_vertical_black_48dp"
            android:layout_width="25dp"
            android:layout_height="25dp" />
    </LinearLayout>

</android.support.constraint.ConstraintLayout>

Ответы [ 2 ]

1 голос
/ 24 мая 2019

Вы можете установить высоту / ширину как 0dp (в зависимости от вертикальной / горизонтальной ориентации LinearLayout соответственно) вместе с настройкой ее веса, чтобы соответствовать ей с ограничениями, т.е.

android:layout_width = "0dp"
android:layout_weight = "1.0"

Кроме того, вы можете использовать следующее для отображения эллипсов, когда текст слишком длинный:

android:ellipsize="end"
android:maxLines="1"
0 голосов
/ 24 мая 2019

Попробуйте это:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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="wrap_content"
    android:layout_marginTop="8dp"
    android:layout_marginBottom="8dp"
    android:background="@color/colorPrimary">

    <LinearLayout
        android:id="@+id/songitemly"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        android:weightSum="100">

        <ImageView
            android:id="@+id/imgscov"
            android:layout_width="45dp"
            android:layout_height="45dp"
            android:layout_marginStart="15dp"
            android:layout_marginTop="5dp"
            android:layout_marginEnd="5dp"
            android:layout_marginBottom="5dp"
            android:contentDescription="@string/app_name"
            android:scaleType="fitXY"
            android:src="@drawable/a" />

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_toStartOf="@id/buttons"
                android:orientation="vertical">

                <TextView
                    android:id="@+id/sname"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:ellipsize="end"
                    android:gravity="center"
                    android:singleLine="true"
                    android:textColor="#FCFAFA"
                    android:textSize="16sp"
                    tools:text="Test" />

                <TextView
                    android:id="@+id/sartist"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:ellipsize="end"
                    android:gravity="center"
                    android:singleLine="true"
                    android:textColor="#D3D1D1"
                    tools:ignore="MissingConstraints"
                    tools:text="Test" />
            </LinearLayout>


            <LinearLayout
                android:id="@+id/buttons"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentEnd="true">

                <com.airbnb.lottie.LottieAnimationView
                    android:id="@+id/playinganim"
                    android:layout_width="25dp"
                    android:layout_height="25dp"
                    android:layout_marginStart="5dp"
                    android:layout_marginTop="5dp"
                    android:layout_marginEnd="10dp"
                    android:layout_weight="20"
                    android:visibility="invisible"
                    app:lottie_autoPlay="true"
                    app:lottie_fileName="playing.json"
                    app:lottie_loop="true" />

                <ImageView
                    android:id="@+id/imgmenu"
                    android:layout_width="25dp"
                    android:layout_height="25dp"
                    android:layout_marginStart="5dp"
                    android:layout_marginTop="5dp"
                    android:layout_marginEnd="10dp"
                    android:layout_weight="10"
                    app:srcCompat="@drawable/a" />

            </LinearLayout>
        </RelativeLayout>
    </LinearLayout>
</android.support.constraint.ConstraintLayout>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...