ConstraintLayout版本:1.1.0稳定。
我使用ConstraintLayout作为recyclerview项目布局,xml文件如下所示:
<?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:background="@drawable/list_item_bg_selector"
android:minHeight="60dp">
<android.support.constraint.Guideline
android:id="@+id/left_guide_line"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_begin="16dp"/>
<android.support.constraint.Guideline
android:id="@+id/top_guide_line"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_begin="10dp"/>
<android.support.constraint.Guideline
android:id="@+id/right_guide_line"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_end="16dp"/>
<android.support.constraint.Guideline
android:id="@+id/bottom_guide_line"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_end="7dp"/>
<ImageView
android:id="@+id/avatar"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_gravity="center_vertical"
android:layout_marginBottom="5dp"
android:layout_marginRight="10dp"
android:layout_marginTop="5dp"
android:scaleType="centerCrop"
android:src="@drawable/common_head_icon"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="@+id/left_guide_line"
app:layout_constraintTop_toTopOf="parent"/>
<ImageView
android:id="@+id/tv_unread_red_point"
style="@style/tips_red_dot_circle_common"
android:visibility="gone"
app:layout_constraintBottom_toTopOf="@+id/avatar"
app:layout_constraintLeft_toRightOf="@+id/avatar"
app:layout_constraintRight_toRightOf="@+id/avatar"
app:layout_constraintTop_toTopOf="@+id/avatar"
tools:visibility="visible"/>
<TextView
android:id="@+id/tv_unread_msg_count"
style="@style/tips_red_dot_num_common"
android:layout_marginLeft="32dp"
android:gravity="center"
android:visibility="gone"
app:layout_constraintBottom_toTopOf="@+id/avatar"
app:layout_constraintLeft_toLeftOf="@+id/left_guide_line"
app:layout_constraintRight_toRightOf="@+id/avatar"
app:layout_constraintTop_toTopOf="@+id/avatar"
tools:text="99+"
tools:visibility="visible"/>
<cn.test.widget.NickWidget
android:id="@+id/name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginStart="10dp"
app:layout_constraintBottom_toTopOf="@+id/msg"
app:layout_constraintLeft_toRightOf="@+id/avatar"
app:layout_constraintRight_toLeftOf="@+id/time"
app:layout_constraintTop_toTopOf="@+id/top_guide_line"
app:layout_constraintVertical_chainStyle="packed"/>
<TextView
android:id="@+id/time"
style="@style/text_h3_common_36px"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:includeFontPadding="false"
android:maxLines="1"
android:text="@string/def_value"
app:layout_constraintBottom_toBottomOf="@+id/name"
app:layout_constraintLeft_toRightOf="@+id/name"
app:layout_constraintRight_toRightOf="@+id/right_guide_line"
app:layout_constraintTop_toTopOf="@+id/name"
tools:text="11:22"/>
<ImageView
android:id="@+id/msg_state"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginStart="10dp"
android:layout_marginTop="1dp"
android:scaleType="centerCrop"
android:src="@drawable/recent_msg_state"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@+id/msg"
app:layout_constraintHorizontal_chainStyle="spread_inside"
app:layout_constraintLeft_toRightOf="@+id/avatar"
app:layout_constraintRight_toLeftOf="@+id/icon_chatroom"
app:layout_constraintTop_toTopOf="@+id/msg"
tools:visibility="visible"/>
<ImageView
android:id="@+id/icon_chatroom"
android:layout_width="14dp"
android:layout_height="14dp"
android:layout_marginLeft="5dp"
android:layout_marginStart="5dp"
android:scaleType="centerCrop"
android:src="@drawable/common_head_icon"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@+id/msg"
app:layout_constraintLeft_toRightOf="@+id/msg_state"
app:layout_constraintRight_toLeftOf="@+id/msg"
app:layout_constraintTop_toTopOf="@+id/msg"
app:layout_goneMarginLeft="10dp"
tools:visibility="visible"/>
<TextView
android:id="@+id/msg"
style="@style/text_h2_common_42px"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginStart="5dp"
android:layout_marginTop="1dp"
android:ellipsize="end"
android:maxLines="1"
android:paddingBottom="1dp"
android:paddingTop="1dp"
app:layout_constraintBottom_toTopOf="@+id/bottom_guide_line"
app:layout_constraintLeft_toRightOf="@+id/icon_chatroom"
app:layout_constraintRight_toLeftOf="@+id/chat_room_exit_icon"
app:layout_constraintTop_toBottomOf="@+id/name"
app:layout_goneMarginLeft="10dp"/>
<ImageView
android:id="@+id/chat_room_exit_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/im_icon_chat_room_exit"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@+id/msg"
app:layout_constraintLeft_toRightOf="@+id/msg"
app:layout_constraintRight_toLeftOf="@+id/group_msg_not_notify_icon"
app:layout_constraintTop_toTopOf="@+id/msg"
tools:visibility="visible"/>
<ImageView
android:id="@+id/group_msg_not_notify_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/pub_nngroup_icon_shield"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@+id/msg"
app:layout_constraintLeft_toRightOf="@+id/chat_room_exit_icon"
app:layout_constraintRight_toLeftOf="@+id/right_guide_line"
app:layout_constraintTop_toTopOf="@+id/msg"
tools:visibility="visible"/>
</android.support.constraint.ConstraintLayout>
当滚动RecyclerView时,我们的性能非常糟糕,如果我将项目布局从ConstraintLayout更改为传统布局(嵌套4或5层),一切正常。我们能做些什么呢?
答案 0 :(得分:0)
我使用ConstraintLayout作为recyclerview的项目布局,滚动顺畅。我认为ConstraintLayout没有问题,但请确保不要在适配器类中调用 myAdapter.notifyDataSetChanged()
。这将使您的应用程序缓慢的UI渲染。