You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 02:16:04