当前位置: 首页 > news >正文

【安卓,问题记录】ImageView 在布局顺序上位于 Button 上方,却出现图像内容被 Button 遮挡

记录一下项目中遇到的问题:

问题现象

在 FrameLayout 等布局中,后声明的 ImageView 本应覆盖在先声明的 Button 上方。
实际表现:ImageView 控件位置正确(布局层级在上),但图像内容却被 Button 遮挡。
布局文件中,控件明明位于按钮的上层,即在FrameLayout等布局中,控件卸载按钮的后面,但是控件的内容却被按钮覆盖了,如下:

<FrameLayoutandroid:layout_marginTop="@dimen/dp20"android:layout_marginEnd="@dimen/dp22"android:layout_marginStart="@dimen/dp22"android:layout_width="match_parent"android:layout_height="wrap_content"><Buttonandroid:id="@+id/btn_invite"android:text="立即邀请"android:visibility="gone"tools:visibility="visible"android:gravity="center"android:background="@drawable/shape_rect_gradient_red"android:textSize="@dimen/sp20"android:textColor="@color/white"android:layout_width="match_parent"android:layout_height="50dp"/><ImageViewandroid:id="@+id/iv_point"android:layout_gravity="end"android:layout_marginTop="@dimen/dp9"android:layout_marginEnd="@dimen/dp25"android:src="@mipmap/float_point"android:layout_width="54dp"android:layout_height="74dp"/>        
</FrameLayout>

所造成的问题,图片被按钮覆盖了

在这里插入图片描述

原因

主题对控件样式的影响

1、现代 Material 主题会为 Button 自动添加 elevation,导致其 Z 轴层级高于无 elevation 的 ImageView,即使 ImageView 声明在后,也会被 Button 遮挡。
2、旧版主题(如 Theme.AppCompat 无阴影样式)中,Button 可能无默认 elevation,此时覆盖正常。

Z 轴层级优先级高于布局顺序

Android 中,控件的显示层级遵循:elevation(Z 轴高度)> 布局声明顺序。因此,即使 ImageView 声明在后,若 Button 的 elevation 更高,仍会显示在上方。

解决办法

1、给Button 换成TextView ,因为TextView 的elevation 默认为0;
2、提高 ImageView 的 elevation,给 ImageView 设置更高的 elevation(如 4dp),使其 Z 轴层级超过 Button(默认为2dp)。

本次问题解决使用了方法2,我给ImageView 设置了4dp的阴影结果如下:
在这里插入图片描述

http://www.dtcms.com/a/328791.html

相关文章:

  • AIOPS人才需具备的技术需求
  • 【完整源码+数据集+部署教程】火柴实例分割系统源码和数据集:改进yolo11-rmt
  • latex中“itemize”
  • 如何写出高质量的dify参数提取器prompt
  • 【P21】OpenCV Python——RGB和BGR,HSV和HSL颜色空间,及VScode中报错问题解决
  • vscode扩展应用 -koroFileHeader(jsdoc代码风格注释)
  • .net\c#web、小程序、安卓开发之基于asp.net家用汽车销售管理系统的设计与实现
  • InnoDB如何解决脏读、不可重复读和幻读的?
  • 天文与航天领域专业计算库介绍
  • C# 反射入门:如何获取 Type 对象?
  • Blender模拟结构光3D Scanner(一)外参数匹配
  • 决策树回归:用“分而治之”的智慧,搞定非线性回归难题(附3D可视化)
  • JS 与 C++ 双向通信实战:基于 WebHostViewListener 的消息处理机制
  • Java后端面试题(含Dubbo、MQ、分布式、并发、算法)
  • 分布式与微服务宝典
  • 智能算法流程图在临床工作中的编程视角系统分析
  • 【docker①】在VS Code中使用Docker容器
  • 安全点(Safepoint)完成后唤醒暂停线程的过程
  • 解决uni-app微信小程序编译报错:unexpected character `1`
  • 机器学习实战·第三章 分类(2)
  • EI学术会议 | 虚拟现实、图像和信号处理
  • 股指期货长线还是短线好?
  • AWS Redis Serverless连接完全指南:从安装到实战
  • Notepad++插件开发实战:从入门到精通
  • oss(阿里云)前端直传
  • 使用 Milvus Operator 在 Kubernetes 中部署 Milvus记录
  • LeetCode 刷题【40. 组合总和 II】
  • 3d游戏引擎中ContentTools中的文件模型导入代码1
  • python---list.sort() 和 sorted(list)的区别
  • JVM安全点轮询汇编函数解析