android - Android Grid View:将图像堆叠在另一个之上
问题描述
得到一个网格视图,其中每个网格项目包含 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>
解决方案
首先,非常感谢 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 中完成)才能显示。
无论如何,我有一个解决方案。尽管我不确定为什么,但对此的任何启示将不胜感激。
推荐阅读
- javascript - 在堆栈导航器中定义 React Native 中的路由类型
- node.js - 使用 res.setheader 在 cookie nodejs 中使用 max-age
- flutter - Flutter 共享偏好代码优化建议?
- python - 尝试在 python 中使用 forexconnect 下载价格历史数据时出现异常
- timestamp - 熊猫在缺少时间戳的情况下滚动并在没有南的情况下获得最大值
- reactjs - React Hooks useState 是异步的吗?
- dialogflow-es - 如何创建动态所需参数
- spring-boot - Spring bootproject 运行良好,但在 Cntroller 测试中出现 DataSource 错误
- node.js - npm is 不是内部或外部命令、可运行程序或批处理文件
- ios - 按下其他连续按钮时如何取消选择按钮?