无法以线性布局均匀对齐项目

时间:2019-05-24 05:08:27

标签: android android-layout android-recyclerview

在我的应用中,我正在使用RecyclerView item.xml来对齐所有具有线性布局的项目,但是这里的问题是,当我将TextView的宽度设置为wrap_content时,如果所设置的文本太大,则将布局中的其他项目推出,有时使它们变得太小,或者有时将它们完全从布局中推出,这是我使用的XML代码,感谢您的帮助。 / p>

<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>

Screenshot of recycler view

这是将宽度和高度设置为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 个答案:

答案 0 :(得分:1)

您可以将高度/宽度设置为0dp(分别取决于LinearLayout的垂直/水平方向),并设置其权重以使其与约束条件相匹配,即

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

此外,当文本太长时,您可以使用以下命令显示省略号:

android:ellipsize="end"
android:maxLines="1"

答案 1 :(得分:0)

尝试一下:

<?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>