【问题标题】:Android Grid View: Stack image on top of anotherAndroid Grid View:将图像堆叠在另一个之上
【发布时间】:2020-11-07 23:31:46
【问题描述】:

有一个网格视图,其中每个网格项包含 2 个图像和 1 个文本视图。

主图像“subjectIcon”始终显示,并且在下面的示例中是带有听诊器的红色方块。第二张图片“favouriteStatus”是一个小星星图片,应该显示在右上角。文本位于“subjectIcon”图像下方。

代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
        android:layout_width="120dp"
        android:layout_height="170dp">

    <ImageView
        android:id="@+id/subjectIcon"
        android:layout_width="wrap_content"
        android:layout_height="120dp"
        android:padding="0dp"
        android:scaleType="fitCenter"
        android:visibility="visible"
        app:srcCompat="@drawable/imagescenario" />

    <ImageView
        android:id="@+id/favouriteStatus"
        android:layout_width="36dp"
        android:layout_height="36dp"
        android:layout_marginStart="84dp"
        android:layout_marginTop="0dp"
        android:scaleType="fitCenter"
        android:visibility="visible"
        app:srcCompat="@drawable/star_fill_drop" />

<TextView
        android:layout_width="120dp"
        android:layout_height="50dp"
        android:id="@+id/subjectTitle"
        android:gravity="center"
        android:textColor="#FFFFFF"
        android:layout_marginTop="120dp"
        android:text="Subject Title"/>

设计视图显示了这一点,这正是我想要的:

但是,当我运行应用程序时,从未显示星形图像。有趣的是,如果我将文本放在主图像的顶部,它会位于顶部并显示。

我的头撞墙了 3 个小时,我错过了什么? 提前致谢

网格视图 xml:

    <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".SubjectListActivity">

<GridView
        android:id="@+id/gv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:columnWidth="120dp"
        android:numColumns="auto_fit"
        android:verticalSpacing="10dp"
        android:horizontalSpacing="5dp"
        android:stretchMode="spacingWidthUniform"

/>


  </androidx.constraintlayout.widget.ConstraintLayout>

【问题讨论】:

  • 嗨,我看不出您如何关联 RelativeLayout 中的三个小部件 .. 我的意思是您没有添加相对布局属性来定义每个小部件的位置 .. 还有你在哪里使用gridView ?
  • 抱歉 Zain 我不知道你在问什么? xml 是一个网格项目。设计视图准确显示每个网格项目应如何显示,但在应用程序中,第二张图像(星形)从不显示

标签: android image gridview


【解决方案1】:

我添加了RelativeLayout ViewGroup 的布局属性。

它们将向底层小部件添加约束,以适应父级以及相互之间的关系。

例如,未出现的ImageView (favouriteStatus) 为父级添加了顶部和右侧/结束约束。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="120dp"
    android:layout_height="170dp">

    <ImageView
        android:id="@+id/subjectIcon"
        android:layout_width="wrap_content"
        android:layout_height="120dp"
        android:layout_alignParentStart="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentBottom="true"
        android:padding="0dp"
        android:scaleType="fitCenter"
        android:visibility="visible"
        app:srcCompat="@drawable/imagescenario" />

    <ImageView
        android:id="@+id/favouriteStatus"
        android:layout_width="36dp"
        android:layout_height="36dp"
        android:layout_alignParentTop="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_marginStart="84dp"
        android:layout_marginLeft="84dp"
        android:layout_marginTop="0dp"
        android:scaleType="fitCenter"
        android:visibility="visible"
        app:srcCompat="@drawable/star_fill_drop" />

    <TextView
        android:id="@+id/subjectTitle"
        android:layout_width="120dp"
        android:layout_height="50dp"
        android:layout_alignParentStart="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentBottom="true"
        android:layout_marginTop="120dp"
        android:gravity="center"
        android:text="Subject Title"
        android:textColor="#FFFFFF" />

</RelativeLayout>

【讨论】:

  • 您好 Zain,感谢您的回答。我复制并粘贴了您的代码,但我仍然遇到同样的问题,即没有显示星形图像。老实说无法解释
  • 能否请您发布gridview 布局
  • 这很奇怪,我现在测试了一下,并没有设法重现这个问题..
  • 感谢您的尝试,至少不只是我一个人!
  • 在我的测试中,您的布局看起来不错(包括答案​​的变化)。所以,试着玩一下图像,使用其他不同大小的可绘制对象,看看.. 还要检查你是否以编程方式更改了可能影响 UI 的内容,并检查适配器
【解决方案2】:

首先,非常感谢 Zain 在上面提供的帮助。知道这不是我的 XML 的问题,这让我查看并更改了我发现问题的另一个区域,尽管我不确定为什么这是一个问题。

在我的代码中,我有一个简单的 IF/ELSE 语句,如果“favStatus”为 1,则显示星形图像,如果为 0,则不显示。

最初我有这个代码:

        if (favStatus.equals("1")) {favIcon.setVisibility(View.VISIBLE);}
        else {favIcon.setVisibility(View.INVISIBLE);}

我发现把它改成这样很简单:

        if (favStatus.equals("1")) {favIcon.setImageResource(R.drawable.star_fill_drop);}
        else {favIcon.setVisibility(View.INVISIBLE);}

我不明白为什么 VISIBLE 不起作用,我必须重新设置图像文件名(已经在 XML 中完成)才能显示。

无论如何,我有一个解决方案。虽然我不知道为什么,但对此的任何启示将不胜感激。

【讨论】:

  • 奇怪而有趣!你能不能把xml中的图标设置为invisible,把你的共享条件去掉一会儿,然后favIcon.setVisibility(View.VISIBLE);看看
  • 试过了,没有显示。仅显示我是否在活动代码中设置了图像路径而不是 XML。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-25
  • 1970-01-01
  • 2021-10-28
  • 1970-01-01
  • 2022-01-11
  • 1970-01-01
  • 2021-12-01
相关资源
最近更新 更多