Я меняю элемент xml в recyclyerView с LinearLayout на ConstraintLayout. Когда я прокручиваю recyclerView по горизонтали, он тормозит и отображается очень медленно, чем LinearLayout.

< Сильный > ConstraintLayout

ConstraintLayout

< Сильный > LinearLayout

LinearLayout

Здесь я делюсь своим xml для ConstraintLayout.

мой элемент ConstraintLayout

<android.support.v7.widget.CardView 
    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="85dp"
    android:layout_height="wrap_content">

<android.support.constraint.ConstraintLayout
    android:id="@+id/merchant_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="10dp"
    android:layout_marginEnd="5dp"
    android:layout_marginStart="5dp">

    <de.hdodenhof.circleimageview.CircleImageView
        android:id="@+id/merchant_img"
        android:layout_width="75dp"
        android:layout_height="75dp"
        android:transitionName="profile"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        tools:ignore="UnusedAttribute"
        tools:src="@drawable/avatar" />

    <com.max.xclusivekotlin.customViews.MyTextView
        android:id="@+id/merchant_name"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginEnd="5dp"
        android:layout_marginStart="5dp"
        android:layout_marginTop="5dp"
        android:ellipsize="end"
        android:maxLines="1"
        android:maxWidth="72dp"
        android:minWidth="72dp"
        android:textAlignment="center"
        android:textColor="@color/blackFont"
        android:textSize="14sp"
        app:layout_constraintEnd_toEndOf="@id/merchant_img"
        app:layout_constraintStart_toStartOf="@id/merchant_img"
        app:layout_constraintTop_toBottomOf="@id/merchant_img"
        tools:text="Chili's" />

    <com.max.xclusivekotlin.customViews.MyTextView
        android:id="@+id/merchant_offer_percent"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="@color/redColor"
        android:textSize="12sp"
        app:layout_constraintBottom_toTopOf="@id/tv_distance"
        app:layout_constraintEnd_toStartOf="@id/merchant_offer_type"
        app:layout_constraintStart_toStartOf="@id/merchant_name"
        app:layout_constraintTop_toBottomOf="@id/merchant_name"
        app:textBold="bold"
        tools:text="25%" />

    <com.max.xclusivekotlin.customViews.MyTextView
        android:id="@+id/merchant_offer_type"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:ellipsize="end"
        android:lines="1"
        android:textColor="@color/blackFont"
        android:textSize="12sp"
        app:layout_constraintBottom_toTopOf="@id/tv_distance"
        app:layout_constraintEnd_toEndOf="@id/merchant_name"
        app:layout_constraintHorizontal_chainStyle="packed"
        app:layout_constraintStart_toEndOf="@id/merchant_offer_percent"
        app:layout_constraintTop_toBottomOf="@id/merchant_name"
        tools:text=" | Refund " />

    <com.max.xclusivekotlin.customViews.MyTextView
         android:id="@+id/tv_distance"
         android:layout_width="0dp"
         android:layout_height="wrap_content"
         android:ellipsize="end"
         android:lines="1"
         android:textAlignment="center"
         android:textColor="@color/greyFont"
         android:textSize="14sp"
         android:visibility="gone"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toEndOf="@id/merchant_img"
         app:layout_constraintStart_toStartOf="@id/merchant_img"
         app:layout_constraintTop_toBottomOf="@id/merchant_offer_percent" />
    </android.support.constraint.ConstraintLayout>
</android.support.v7.widget.CardView>

мой элемент LinearLayout

<android.support.v7.widget.CardView 
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="85dp"
    android:layout_height="wrap_content">

<LinearLayout
    android:id="@+id/merchant_layout"
    android:layout_width="75dp"
    android:layout_height="wrap_content"
    android:layout_marginEnd="5dp"
    android:layout_marginStart="5dp"
    android:gravity="center_horizontal"
    android:orientation="vertical"
    android:paddingBottom="10dp">

    <de.hdodenhof.circleimageview.CircleImageView
        android:id="@+id/merchant_img"
        android:layout_width="75dp"
        android:layout_height="75dp"
        android:transitionName="profile"
        tools:ignore="UnusedAttribute"
        tools:src="@drawable/avatar" />

    <com.max.xclusivekotlin.customViews.MyTextView
        android:id="@+id/merchant_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="5dp"
        android:layout_marginStart="5dp"
        android:layout_marginTop="5dp"
        android:ellipsize="end"
        android:maxLines="1"
        android:maxWidth="72dp"
        android:minWidth="72dp"
        android:textAlignment="center"
        android:textColor="@color/blackFont"
        android:textSize="14sp"
        tools:text="Chili's" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="5dp"
        android:layout_marginStart="5dp"
        android:orientation="horizontal">

        <com.max.xclusivekotlin.customViews.MyTextView
            android:id="@+id/merchant_offer_percent"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@color/redColor"
            android:textSize="12sp"
            app:textBold="bold"
            tools:text="25%" />

        <com.max.xclusivekotlin.customViews.MyTextView
            android:id="@+id/merchant_offer_type"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:ellipsize="end"
            android:lines="1"
            android:textColor="@color/blackFont"
            android:textSize="12sp"
            tools:text=" | Refund " />
    </LinearLayout>

    <com.max.xclusivekotlin.customViews.MyTextView
        android:id="@+id/tv_distance"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ellipsize="end"
        android:lines="1"
        android:textAlignment="center"
        android:textColor="@color/greyFont"
        android:textSize="14sp"
        android:visibility="gone" />
    </LinearLayout>
</android.support.v7.widget.CardView>

Как я могу решить это?

5
Mostafa Esmail 8 Окт 2018 в 13:12

2 ответа

Лучший ответ

Относительный макет .

RelativeLayout - это подход к актуализации сложных форматов с уровневой (одной установкой) схемой. По своей структуре он накладывает вещи, совсем не так, как LinearLayout, который никогда не делает того, что сказано в его названии, независимо от кого-либо еще, RelativeLayout прекрасно помещает вещи относительно других. Предположим, у вас есть неопределенная ширина обзора, и вам нужно пока положить объект сбоку от него и у основания. Вы можете сделать это с помощью LinearLayout, однако это займет два урегулирования, а с RelativeLayout все стало намного чище.

Макет ограничения:

Центр - это RelativeLayout, где все может перекрываться. Как бы то ни было, но что делает ConstraintLayout отличным, так это то, что он может вытеснять различные конструкции: рамный, относительный, линейный. Действительно, существует множество различных форматов, но это обертки. Что мне нравится в ConstraintLayout, так это то, что его очень здорово использовать как часть режима дизайна, прежде чем я вообще не заботился о нем. По большей части из-за плохой работы моего честного оборудования (для Android Studio) и регулярных ошибок рендеринга свойства ConstraintLayout действительно настолько длинные и ужасающие, что лучше использовать его в режиме дизайна. Он может управлять положением и измерениями (совсем не как RelativeLayout) перспектив. Имейте в виду, что параметры, начинающиеся с layout_, подразумеваются для формата упаковки. Само представление не касается тех

Таким образом, вы можете использовать свой самый любимый вес из LinearLayout в ConstraintLayout с помощью императивных цепочек, приземляться влево / вправо / вверху / основание из RelativeLayout, накладывать такие вещи, как в простом FrameLayout Я думаю, что никто не использует GridLayout, это сильно разочаровывает, постоянно одобряют заселение LinearLayout, с ConstraintLayout вы можете сделать это легко

Недостаток макета ограничений:

Несмотря на то, что это круто, контурный режим все же не такой безупречный, как XML. Это просто запутывается, вам нужно увеличивать перспективу, и это побуждает вас просто ConstraintLayout, в случае, если вы попытаетесь включить какой-то устойчивый дизайн - вы должны дважды подумать над этим.

Надеюсь, что это поможет вам.

2
Abhinav Gupta 8 Окт 2018 в 12:06

Может быть, из-за больших ограничений, которые вы используете в производительности ConstraintLayout или, может быть, RecyclerView.

Я рекомендую вам использовать RelativeLayout

Эта ссылка может вам помочь:

Повышение производительности RecyclerView

Производительность RelativeLayout и ConstraintLayout

Как сделать RecyclerView плавным

4
Ali Khaki 8 Окт 2018 в 10:47