为什么具有自定义背景的 RecyclerView 项目的边框半径消失了?
Why did the border radius disappear for an RecyclerView item with a custom background?
我在摸索Android发展,有时我有初学者的问题。现在我遇到了创建具有不同背景颜色的 RecyclerView 项目的问题。我创建了一个简单的
RecyclerView items list 首先,我为所有项目设置一个背景(浅绿色)。
然后我决定为每个项目设置一个单独的背景。这是我在适配器文件中的做法:
override fun onBindViewHolder(holder: ChapterListAdapter.ViewHolder, position: Int) {
holder.chapter_item.text = chapter_titles[position]
holder.chapter_details.text = chapter_descrs[position]
holder.chapter_image.setImageResource(chapter_images[position])
when(position){
0 -> holder.chapter_card.setBackgroundColor(Color.parseColor("#ff5668"))
1 -> holder.chapter_card.setBackgroundColor(Color.parseColor("#41d5e2"))
2 -> holder.chapter_card.setBackgroundColor(Color.parseColor("#4d53e0"))
3 -> holder.chapter_card.setBackgroundColor(Color.parseColor("#ff8e36"))
}
}
它确实有效,虽然这可能不是正确的方法,但它确实有效。但是,存在一个问题。在屏幕截图中,您可以看到最后一项具有边框半径。我为 card_layout.xml 中的元素设置了 cardCornerRadius 值,出于某种原因,当我为项目分配自定义颜色时,该值消失了。这可以在屏幕截图中看到。具有浅绿色背景的最后一个元素具有边框半径(我没有为该元素分配自定义背景颜色值)并且具有分配自定义颜色的前四个元素没有边框半径。
请告诉我为什么会发生这种情况以及如何解决它。我需要保留所有元素的边框半径。
我很高兴我自己喜欢这个错误。为了设置项目背景颜色,我使用了 setBackgroundColor 但在我的情况下它不正确。在我的例子中,我必须使用 setCardBackgroundColor,因为我为 CardView 设置了背景。现在我的代码看起来是:
override fun onBindViewHolder(holder: ChapterListAdapter.ViewHolder, position: Int) {
holder.chapter_item.text = chapter_titles[position]
holder.chapter_details.text = chapter_descrs[position]
holder.chapter_image.setImageResource(chapter_images[position])
when(position){
0 -> {
holder.chapter_card.setCardBackgroundColor(Color.parseColor("#ff5668"))
}
1 -> {
holder.chapter_card.setCardBackgroundColor(Color.parseColor("#41d5e2"))
}
2 -> {
holder.chapter_card.setCardBackgroundColor(Color.parseColor("#4d53e0"))
}
3 -> {
holder.chapter_card.setCardBackgroundColor(Color.parseColor("#ff8e36"))
}
}
}
而且效果很好。
我在摸索Android发展,有时我有初学者的问题。现在我遇到了创建具有不同背景颜色的 RecyclerView 项目的问题。我创建了一个简单的 RecyclerView items list 首先,我为所有项目设置一个背景(浅绿色)。 然后我决定为每个项目设置一个单独的背景。这是我在适配器文件中的做法:
override fun onBindViewHolder(holder: ChapterListAdapter.ViewHolder, position: Int) {
holder.chapter_item.text = chapter_titles[position]
holder.chapter_details.text = chapter_descrs[position]
holder.chapter_image.setImageResource(chapter_images[position])
when(position){
0 -> holder.chapter_card.setBackgroundColor(Color.parseColor("#ff5668"))
1 -> holder.chapter_card.setBackgroundColor(Color.parseColor("#41d5e2"))
2 -> holder.chapter_card.setBackgroundColor(Color.parseColor("#4d53e0"))
3 -> holder.chapter_card.setBackgroundColor(Color.parseColor("#ff8e36"))
}
}
它确实有效,虽然这可能不是正确的方法,但它确实有效。但是,存在一个问题。在屏幕截图中,您可以看到最后一项具有边框半径。我为 card_layout.xml 中的元素设置了 cardCornerRadius 值,出于某种原因,当我为项目分配自定义颜色时,该值消失了。这可以在屏幕截图中看到。具有浅绿色背景的最后一个元素具有边框半径(我没有为该元素分配自定义背景颜色值)并且具有分配自定义颜色的前四个元素没有边框半径。
请告诉我为什么会发生这种情况以及如何解决它。我需要保留所有元素的边框半径。
我很高兴我自己喜欢这个错误。为了设置项目背景颜色,我使用了 setBackgroundColor 但在我的情况下它不正确。在我的例子中,我必须使用 setCardBackgroundColor,因为我为 CardView 设置了背景。现在我的代码看起来是:
override fun onBindViewHolder(holder: ChapterListAdapter.ViewHolder, position: Int) {
holder.chapter_item.text = chapter_titles[position]
holder.chapter_details.text = chapter_descrs[position]
holder.chapter_image.setImageResource(chapter_images[position])
when(position){
0 -> {
holder.chapter_card.setCardBackgroundColor(Color.parseColor("#ff5668"))
}
1 -> {
holder.chapter_card.setCardBackgroundColor(Color.parseColor("#41d5e2"))
}
2 -> {
holder.chapter_card.setCardBackgroundColor(Color.parseColor("#4d53e0"))
}
3 -> {
holder.chapter_card.setCardBackgroundColor(Color.parseColor("#ff8e36"))
}
}
}
而且效果很好。