Layout_tostartof 在 RecyclerView 中膨胀 RelativeLayout 后不工作
Layout_tostartof not working after inflating RelativeLayout in RecyclerView
我使用线性布局管理器水平方向的 RecyclerView 制作水平滚动视图。在我的 ViewHolder 中,我使用 RelativeLayout,在我的布局底部有两个小图像 "img_1" 和 "img_2",其中 "img_2" 与 parentEnd 对齐,"img_1" 对齐使用 "android:layout_toStartOf" 到 "img_2"。当我 运行 应用程序时, "img_1" 无一例外地神奇地消失了。在 "Design" XML 预览中一切正常,在实施 RecyclerView 之前,我的布局工作得很好。当我删除 "android:layout_toStartOf" 属性时,"img_1" 就在那里。我尝试将 "android:layout_toStartOf" 添加到子 RelativeLayout,它也消失了。
我猜这是我的 RecycleViewAdapter 中 LayoutInflater 的一个错误,它不知道如何处理 "android:layout_toStartOf"。
我尝试搜索错误或类似问题,但没有找到任何相关内容。
ViewHolderLayout:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingEnd="8dp">
<ImageView
android:id="@+id/trailerView"
android:layout_width="300dp"
android:scaleType="centerCrop"
android:layout_height="142dp"
android:layout_below="@id/description"
android:layout_marginTop="8dp"
android:layout_centerHorizontal="true"/>
<TextView
android:id="@+id/movieTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/trailerView"
android:layout_marginTop="8dp"
android:layout_marginStart="@dimen/activity_vertical_margin"
android:fontFamily="sans-serif-medium"
android:textSize="16sp"
android:textColor="@color/white"
android:lineSpacingExtra="4sp"
android:text="Title"
/>
<TextView
android:id="@+id/movieTagline"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_below="@id/movieTitle"
android:layout_marginStart="@dimen/activity_vertical_margin"
android:lineSpacingExtra="0sp"
android:singleLine="true"
android:ellipsize="end"
android:text="Tagline"
android:textColor="@color/white_87"
android:textSize="10sp" />
<ImageView
android:id="@+id/img_2"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_alignBottom="@id/movieTagline"
android:layout_alignParentEnd="true"
android:layout_marginEnd="@dimen/activity_vertical_margin" />
<ImageView
android:id="@+id/img_1"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_alignBottom="@id/movieTagline"
android:layout_toStartOf="@id/img_2"
android:layout_marginEnd="4dp" />
</RelativeLayout>
RecyclerViewAdapter:
class RecommendViewAdapter(val recommendations: Array<MovieResponse>,
val images: ArrayList<Drawable>)
: RecyclerView.Adapter<RecommendViewAdapter.ViewHolder>() {
override fun onBindViewHolder(holder: ViewHolder?, position: Int) {
holder?.title?.text = "${recommendations[position].title} (${recommendations[position].year})"
holder?.tagline?.text = recommendations[position].tagline
holder?.trailer?.setImageDrawable(images[position])
}
override fun getItemCount(): Int {
return recommendations.size ?: 0
}
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder {
val view = LayoutInflater.from(parent?.context).inflate(R.layout.recommendations_content, parent, false)
return ViewHolder(view)
}
inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), View.OnClickListener {
var title: TextView = itemView.findViewById(R.id.movieTitle)
var tagline: TextView = itemView.findViewById(R.id.movieTagline)
var trailer: ImageView = itemView.findViewById(R.id.trailerView)
init {
itemView.setOnClickListener(this)
}
override fun onClick(v: View?) {}
}
}
通过实施 ConstraintLayout 而不是 RelativeLayout 解决了我的问题,但错误仍然存在?
我使用线性布局管理器水平方向的 RecyclerView 制作水平滚动视图。在我的 ViewHolder 中,我使用 RelativeLayout,在我的布局底部有两个小图像 "img_1" 和 "img_2",其中 "img_2" 与 parentEnd 对齐,"img_1" 对齐使用 "android:layout_toStartOf" 到 "img_2"。当我 运行 应用程序时, "img_1" 无一例外地神奇地消失了。在 "Design" XML 预览中一切正常,在实施 RecyclerView 之前,我的布局工作得很好。当我删除 "android:layout_toStartOf" 属性时,"img_1" 就在那里。我尝试将 "android:layout_toStartOf" 添加到子 RelativeLayout,它也消失了。
我猜这是我的 RecycleViewAdapter 中 LayoutInflater 的一个错误,它不知道如何处理 "android:layout_toStartOf"。
我尝试搜索错误或类似问题,但没有找到任何相关内容。
ViewHolderLayout:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingEnd="8dp">
<ImageView
android:id="@+id/trailerView"
android:layout_width="300dp"
android:scaleType="centerCrop"
android:layout_height="142dp"
android:layout_below="@id/description"
android:layout_marginTop="8dp"
android:layout_centerHorizontal="true"/>
<TextView
android:id="@+id/movieTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/trailerView"
android:layout_marginTop="8dp"
android:layout_marginStart="@dimen/activity_vertical_margin"
android:fontFamily="sans-serif-medium"
android:textSize="16sp"
android:textColor="@color/white"
android:lineSpacingExtra="4sp"
android:text="Title"
/>
<TextView
android:id="@+id/movieTagline"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_below="@id/movieTitle"
android:layout_marginStart="@dimen/activity_vertical_margin"
android:lineSpacingExtra="0sp"
android:singleLine="true"
android:ellipsize="end"
android:text="Tagline"
android:textColor="@color/white_87"
android:textSize="10sp" />
<ImageView
android:id="@+id/img_2"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_alignBottom="@id/movieTagline"
android:layout_alignParentEnd="true"
android:layout_marginEnd="@dimen/activity_vertical_margin" />
<ImageView
android:id="@+id/img_1"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_alignBottom="@id/movieTagline"
android:layout_toStartOf="@id/img_2"
android:layout_marginEnd="4dp" />
</RelativeLayout>
RecyclerViewAdapter:
class RecommendViewAdapter(val recommendations: Array<MovieResponse>,
val images: ArrayList<Drawable>)
: RecyclerView.Adapter<RecommendViewAdapter.ViewHolder>() {
override fun onBindViewHolder(holder: ViewHolder?, position: Int) {
holder?.title?.text = "${recommendations[position].title} (${recommendations[position].year})"
holder?.tagline?.text = recommendations[position].tagline
holder?.trailer?.setImageDrawable(images[position])
}
override fun getItemCount(): Int {
return recommendations.size ?: 0
}
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder {
val view = LayoutInflater.from(parent?.context).inflate(R.layout.recommendations_content, parent, false)
return ViewHolder(view)
}
inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), View.OnClickListener {
var title: TextView = itemView.findViewById(R.id.movieTitle)
var tagline: TextView = itemView.findViewById(R.id.movieTagline)
var trailer: ImageView = itemView.findViewById(R.id.trailerView)
init {
itemView.setOnClickListener(this)
}
override fun onClick(v: View?) {}
}
}
通过实施 ConstraintLayout 而不是 RelativeLayout 解决了我的问题,但错误仍然存在?