Kotlin Android应用RecyclerView图片下方文字不显示问题求助
华为设备RecyclerView列表项文字缺失问题排查
问题描述
基于Kotlin开发的Android应用中,某页面通过RecyclerView展示自行车列表,布局为图片下方显示对应名称。该功能在模拟器及多数设备上运行正常,但有华为手机用户反馈仅能看到图片,无法显示下方文字。
相关代码
Activity代码
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_bikes) val myDataset = Datasource().loadBikes() val recyclerView = findViewById<RecyclerView>(R.id.recycler_view) recyclerView.adapter = ItemAdapter(this, myDataset) recyclerView.setHasFixedSize(true) }
模型类
class Bikes(@StringRes val stringResourceId: Int, @DrawableRes val imageResourceId: Int) { }
数据源类
class Datasource { fun loadBikes(): List<Bikes> { return listOf( Bikes(R.string.bike11, R.drawable.bike11), Bikes(R.string.bike1, R.drawable.bike1), ..... ) } }
适配器代码
class ItemAdapter(private val context: Context, private val dataset: List<Bikes>) : RecyclerView.Adapter<ItemAdapter.ItemViewHolder>() { class ItemViewHolder(private val view: View) : RecyclerView.ViewHolder(view) { val textView: TextView = view.findViewById(R.id.item_title) val imageView: ImageView = view.findViewById(R.id.item_image) } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder { val adapterLayout = LayoutInflater.from(parent.context).inflate(R.layout.list_item, parent, false) return ItemViewHolder(adapterLayout) } override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { val item = dataset[position] holder.textView.text = context.resources.getString(item.stringResourceId) holder.imageView.setImageResource(item.imageResourceId) } override fun getItemCount() = dataset.size }
Activity布局
<androidx.recyclerview.widget.RecyclerView android:id="@+id/recycler_view" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@+id/header_text" android:textColor="@color/black" android:adjustViewBounds="true" android:scrollbars="vertical" app:layoutManager="LinearLayoutManager" />
列表项布局
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:padding="20dp"> <ImageView android:id="@+id/item_image" android:layout_width="match_parent" android:layout_height="wrap_content" android:importantForAccessibility="no" android:scaleType="centerCrop" android:adjustViewBounds="true" app:layout_constrainedHeight="true" app:layout_constraintHeight_max="0dp" app:layout_constraintVertical_bias="0" /> <TextView android:id="@+id/item_title" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="10dp" android:textAppearance="?attr/textAppearanceHeadline6" /> </LinearLayout>
可能的原因及解决方案
- ConstraintLayout属性误用:列表项父布局是LinearLayout,但ImageView使用了
app:layout_constraintHeight_max="0dp"等仅ConstraintLayout支持的约束属性,这些属性在LinearLayout中会被忽略,可能导致ImageView高度计算异常,挤压TextView的显示空间。建议移除ImageView中所有app:layout_constraint开头的属性。 - TextView高度设置问题:TextView的
android:layout_height设为match_parent,在LinearLayout垂直布局中,会试图占据父布局剩余的全部空间,但如果ImageView高度计算超出预期,可能导致TextView被挤出可视区域。将android:layout_height改为wrap_content即可。 - 文字颜色与背景冲突:华为部分系统主题可能修改了
?attr/textAppearanceHeadline6的文字颜色,使其与列表项背景色一致,导致文字不可见。可以显式给TextView设置android:textColor="@color/black"(或其他对比明显的颜色)。 - 资源加载异常:若用户设备的语言环境没有对应的字符串资源翻译,
context.resources.getString(item.stringResourceId)可能返回空字符串,导致文字不显示。可以检查strings.xml是否覆盖了该用户的语言,或在代码中添加默认值兜底。
内容的提问来源于stack exchange,提问作者cootje
相关产品推荐
相关产品推荐

