当前位置: 首页 > 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.xdnf.cn/news/1291087.html

相关文章:

  • 北京JAVA基础面试30天打卡09
  • ELK开启安全策略
  • 【递归、搜索与回溯算法】穷举、暴搜、深搜、回溯、剪枝
  • String里常用的方法
  • w481社区老人健康信息管理系统的设计与实现
  • 5.语句几个分类
  • BGE:智源研究院的通用嵌入模型家族——从文本到多模态的语义检索革命
  • 开源WAF新标杆:雷池SafeLine用语义分析重构网站安全边界
  • 【C#】利用数组实现大数数据结构
  • 银发经济时代:科技赋能养老,温情守护晚年,让老人不再孤独无助
  • LeetCode 面试经典 150_数组/字符串_整数转罗马数字(18_12_C++_中等)(模拟)(对各位进行拆解)
  • STM32HAL 快速入门(六):GPIO 输入之按键控制 LED
  • JMeter 测试 WebSocket 接口的详细教程
  • HarmonyOS NDK的JavaScript/TypeScript与C++交互机制
  • 实战多屏Wallpaper壁纸显示及出现黑屏问题bug分析-学员作业
  • 从0开始配置conda环境并在PyCharm中使用
  • 基于Apache Flink的实时数据处理架构设计与高可用性实战经验分享
  • Flink中的窗口
  • 解决程序连不上RabbitMQ:Attempting to connect to/access to vhost虚拟主机挂了的排错与恢复
  • Windows也能用!Claude Code硬核指南
  • 【报错解决】Conda - Downloaded bytes did not match Content-Length
  • Java零基础笔记16(Java编程核心:存储读写数据方案—File文件操作、IO流、IO框架)
  • 搜索引擎核心机制解析
  • 5.0.9.1 C# wpf通过WindowsFormsHost嵌入windows media player(AxInterop.WMPLib)
  • C# WPF本地Deepseek部署
  • 集成电路学习:什么是CV计算机视觉
  • IPA1299至为芯替代TI ADS1299的脑机接口芯片
  • 网络安全合规6--服务器安全检测和防御技术
  • 高级IO(五种IO模型介绍)
  • Spring、Spring MVC、Spring Boot与Spring Cloud的扩展点全面梳理