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

相关文章:

  • [激光原理与应用-263]:理论 - 几何光学 - 光纤通信:以光为媒的现代通信基石
  • MySQL宝典
  • html原生js文件使用javascript-obfuscator插件进行加密处理
  • 《C++进阶之继承多态》【final + 继承与友元 + 继承与静态成员 + 继承模型 + 继承和组合】
  • HTML第三次作业
  • 腾讯位置商业授权微信小程序关键词输入提示
  • Flink DataStream 按分钟或日期统计数据量
  • 深度学习——03 神经网络(3)-网络优化方法
  • 基于Apache Flink的实时数据处理架构设计与高可用性实战经验分享
  • 搜索引擎核心机制解析
  • 美团搜索推荐统一Agent之性能优化与系统集成
  • 云计算-OpenStack 实战运维:从组件配置到故障排查(含 RAID、模板、存储管理,网络、存储、镜像、容器等)
  • Flink中的窗口
  • HTML5 Canvas实现数组时钟代码,适用于wordpress侧边栏显示
  • 方法论基础。
  • 设计秒杀系统从哪些方面考虑
  • 从零开始:用PyTorch实现线性回归模型
  • 比特币与区块链:去中心化的技术革命
  • VUE2连接USB打印机
  • Pytorch FSDP权重分片保存与合并
  • 【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day3
  • 【Qt开发】常用控件(三) -> geometry
  • 疏老师-python训练营-Day44预训练模型
  • php7 太空船运算符
  • Linux 软件编程:文件IO、目录IO、时间函数
  • 适配安卓15(对应的sdk是35)
  • RxJava 在 Android 中的深入解析:使用、原理与最佳实践
  • 大牌点餐接口api对接全流程
  • 《吃透 C++ 类和对象(中):构造函数与析构函数的核心逻辑》
  • Ubuntu22.04轻松安装Qt与OpenCV库