在我的RecyclerView元素中,最后一个元素上下的边距不正确。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在我的RecyclerView元素中,最后一个元素上下的边距不正确。相关的知识,希望对你有一定的参考价值。
问题。 如果ImageView是VISIBLE,并且 fragment_list_element_content
TextView只有几行文字,上下左右的边距 fragment_list_element_text_view_group
太大。如果ImageView是GONE,并且 fragment_list_element_content
TextView有很多行文字,上下的边距。fragment_list_element_text_view_group
都太小了。
我的问题布局的xml。
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/fragment_list_element_background"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/roundrect_fragment_list_element_background"
android:elevation="@dimen/fragment_list_element_background_elevation"
android:layout_marginTop="@dimen/fragment_list_element_background_margin_top"
android:layout_marginStart="@dimen/fragment_list_element_background_margin_start"
android:layout_marginEnd="@dimen/fragment_list_element_background_margin_end"
android:layout_marginBottom="@dimen/fragment_list_element_background_margin_bottom"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent">
<ImageView
android:id="@+id/fragment_list_element_image_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@drawable/placeholder_image"
android:contentDescription="@string/fragment_list_element_image_view_content_description"
android:adjustViewBounds="true"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
tools:visibility="visible" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/fragment_list_element_text_view_group"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/fragment_list_element_textviews_margin_top"
android:layout_marginStart="@dimen/fragment_list_element_textviews_margin_start"
android:layout_marginEnd="@dimen/fragment_list_element_textviews_margin_end"
android:layout_marginBottom="@dimen/fragment_list_element_textviews_margin_bottom"
app:layout_constraintTop_toBottomOf="@id/fragment_list_element_image_view"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent">
<TextView
android:id="@+id/fragment_list_element_date"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/default_date_string"
android:textSize="@dimen/fragment_list_element_date_font_size"
android:textColor="@color/font_color_grey"
android:textAllCaps="true"
android:maxLines="1"
app:layout_constraintVertical_chainStyle="packed"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toTopOf="@id/fragment_list_element_title" />
<TextView
android:id="@+id/fragment_list_element_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/default_text"
android:textSize="@dimen/fragment_list_element_title_font_size"
android:textColor="@color/font_color_black"
android:textStyle="bold"
app:layout_constraintTop_toBottomOf="@id/fragment_list_element_date"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toTopOf="@id/fragment_list_element_content" />
<TextView
android:id="@+id/fragment_list_element_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/default_text"
android:textSize="@dimen/fragment_list_element_content_font_size"
android:textColor="@color/font_color_grey"
app:layout_constraintTop_toBottomOf="@id/fragment_list_element_title"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
我的RecyclerViewAdapter中布局的膨胀。
import android.annotation.SuppressLint
import android.os.Build
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.recyclerview.widget.RecyclerView
import my.project.R
import java.text.SimpleDateFormat
class MyListAdapter(private val elementList: List<Element>)
: RecyclerView.Adapter<MyListAdapter.ViewHolder>()
class ViewHolder(view: View): RecyclerView.ViewHolder(view)
val background: ConstraintLayout = view.findViewById(R.id.news_list_element_background)
val imageView: ImageView = view.findViewById(R.id.news_list_element_image_view)
val date: TextView = view.findViewById(R.id.news_list_element_date)
val title: TextView = view.findViewById(R.id.news_list_element_title)
val content: TextView = view.findViewById(R.id.news_list_element_content)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder
val itemView = LayoutInflater.from(parent.context).inflate(
R.layout.fragment_list_element,
parent,
false
)
return ViewHolder(itemView)
@SuppressLint("SimpleDateFormat")
override fun onBindViewHolder(holder: ViewHolder, position: Int)
val element = elementList[position]
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
holder.background.clipToOutline = true
if (element.thumbnail != null)
holder.imageView.setImageBitmap(element.thumbnail)
holder.imageView.visibility = View.VISIBLE
else
holder.imageView.visibility = View.GONE
holder.date.text = SimpleDateFormat("dd. MMMM yyyy").format(element.date)
holder.title.text = element.title
holder.content.text = element.content
override fun getItemCount(): Int
return elementList.size
答案
有一个布局与 android:layout_height="match_parent"
直接在一个具有 android:layout_height="wrap_content"
似乎会导致这个问题。
为什么这不会产生一个构建错误,在膨胀过程中抛出一个RuntimeException,或者至少显示一个Lint警告,对我来说是个谜。
以上是关于在我的RecyclerView元素中,最后一个元素上下的边距不正确。的主要内容,如果未能解决你的问题,请参考以下文章
XML/android:如何为 RecyclerView 项目制作白色下划线? [复制]