Android listview 项目使用数组适配器在图像上显示文本

Posted

技术标签:

【中文标题】Android listview 项目使用数组适配器在图像上显示文本【英文标题】:Android listview item display text over image using array adapter 【发布时间】:2013-04-05 06:31:37 【问题描述】:

我已经重载了 listview 的 getView 方法来填充列表项的自定义样式。

这是现在的样子:!!

红色只是显示listview项的背景

这里我使用了 3 个控件:用于图像的 Imageview,2 个文本视图(一个顶部,一个底部)。

这里的问题是列表视图项的高度正在增加。我想要两个文本视图而不是高于或低于图像。在某种程度上我知道这个问题的根本原因,但不知道如何解决它。

这里是listview项的布局:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" 
    android:layout_
    android:layout_
    android:padding="5dp"   >

  <ImageView android:id="@+id/imgIcon"
    android:layout_
    android:layout_
    android:layout_marginRight="5dp" 
    android:scaleType="fitCenter"/>

   <TextView android:id="@+id/txtTitle"
    android:layout_
    android:layout_
    android:gravity="top"
    android:textStyle="bold"
    android:textSize="20sp"
    android:textColor="#FFFFFF"
    android:layout_marginLeft="10dp"
    android:layout_marginTop="2dp"
    android:layout_alignLeft="@+id/imgIcon"
    android:layout_alignTop="@+id/imgIcon"
    android:layout_alignBottom="@+id/imgIcon"/>

   <TextView android:id="@+id/txtTime"
    android:layout_
    android:layout_
    android:gravity="bottom"
    android:textStyle="bold"
    android:textSize="18sp"
    android:textColor="#FFFFFF"
    android:layout_marginLeft="10dp"
    android:layout_marginBottom="5dp"
    android:layout_alignLeft="@+id/imgIcon"
    android:layout_alignTop="@+id/imgIcon"
    android:layout_alignBottom="@+id/imgIcon"/>

问题是我正在为 Imageview 使用 png 图像,并且它们的大小在某些纵横比中越来越大。如果我对列表视图项布局的高度进行硬编码,特别是在我的手机屏幕尺寸上,情况开始看起来不错,但在某些不同的屏幕尺寸上情况变得更糟(这也是有道理的)。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" 
android:layout_
android:layout_
android:padding="5dp"   >

如果有人能解释一下如何做到这一点,那就太好了。主要问题是在图像上显示文本(并且图像不一样)。谢谢。

更新:我的主要问题是我没有图像的位向量,而是 PNG,它试图放大图像。 (将比例类型设置为 center-fit 可能是一个选项,但它是否适用于背景资源?。如果我将图像设置为列表视图项的背景并在其上设置两个文本,则输出如下。

【问题讨论】:

您是否考虑过为您的视图创建一个布局文件,将您的图像设置为背景,然后将您的文本视图放置在您想要的位置? 【参考方案1】:

好的,在您的 CustomArrayAdaptor 中调用 getView() 时,不要将 ImageView 位图设置为您拥有的图像(我相信您当前正在执行的操作),而是调用 View.setBackgroundResource(R.drawable.yourimage.png)在你夸大它之后在你的视野中。 xml中的等价物如下:

android:background="@drawable/yourimage".

如果您需要更多信息,请告诉我。

【讨论】:

是的。我现在只是在尝试。希望它会奏效。等待 5-10 分钟更新:) 酷。一件事,您不需要图像文件扩展名。那是一个错字。 父 layout_height 是否设置为 wrap_content? 你是指listview_item_style文件(上面指定)还是listview本身(在activity中)或者activity的高度? ListView 项 xml 相对布局。您还希望将 match_parent 用于 layout_width,因为我认为 fill_parent 已被弃用。【参考方案2】:

如果您使用纯色作为背景,并且您打算支持各种屏幕尺寸,我认为在文本视图上使用背景色填充可能会更容易,文本视图堆叠并对齐这样就没有边界了。这样它就不会有任何堆叠问题(一个简单的线性布局就可以了),并且它可以在不处理图像的情况下进行扩展。

【讨论】:

以上是关于Android listview 项目使用数组适配器在图像上显示文本的主要内容,如果未能解决你的问题,请参考以下文章

更改数组列表时,带有 ArrayList 和 ListView 的 Android 数组适配器不会更新

如何在android中去listview适配器项目点击监听器片段?

更改了arraylist时,ArrayList和ListView的Android数组适配器不会更新

android-ListView空间的使用

在android studio中删除一个带有按钮的listview项目

带有arraylist的listview,android中的简单适配器