0

0

Android inset标签用法 XML调整Drawable的内边距

星降

星降

发布时间:2026-03-13 11:18:31

|

657人浏览过

|

来源于php中文网

原创

inset 标签只能用于 drawable XML 文件,不可直接写在 layout 中;必须作为根元素或嵌套在 layer-list、selector 等 Drawable 容器内,且四个 inset 属性需为 dimension 类型(如 dp/sp),不可用纯数字或 integer 资源。

android inset标签用法 xml调整drawable的内边距

inset 标签必须用在 drawable XML 文件里,不能直接写在 layout 中

很多人一上来就在 activity_main.xml 里写 <inset>,结果毫无效果——inset 不是 View 属性,也不是布局标签,它只作用于 Drawable 资源。你得新建一个 res/drawable/inset_bg.xml 这类文件,再把它设为 View 的 android:backgroundapp:srcCompat(配合 VectorDrawable)。

常见错误现象:inset 写对了但界面没变化,八成是放错了位置;或者用了 android:drawableLeft 这类属性直接引用 inset XML,而该属性只接受原始 Drawable,不支持嵌套层级。

  • inset 必须作为根元素或嵌套在 layer-listselector 等 Drawable 容器内
  • 不能用在 values/colors.xmlvalues/dimens.xml
  • 如果目标是给 TextView 的 compound drawable 加内边距,得先用 inset 包一层 drawable,再通过 setCompoundDrawablesWithIntrinsicBounds() 动态设置

inset 的四个方向参数不是像素值,而是可带单位的尺寸引用

你写 android:insetLeft="12dp" 没问题,但写 android:insetLeft="12" 就会报错:AAPT 会把它当纯数字,而系统要求它是 dimension 类型。更隐蔽的坑是直接引用 @dimen/spacing_s —— 只要这个 dimen 定义的是 <dimen name="spacing_s">8dp</dimen>,就完全合法;但如果误写成 <integer name="spacing_s">8</integer>,运行时会崩溃,提示 Resource ID #0x7f060000 is not a valid dimension

Mokker AI
Mokker AI

AI产品图添加背景

下载
  • 支持单位:dp、sp、px、mm、in,不支持 % 或无单位数字
  • 所有四个属性(insetLeftinsetTopinsetRightinsetBottom)都可单独设置,未声明的默认为 0
  • 如果想让 inset 随屏幕密度缩放,优先用 dp;固定像素场景(如与 1px 分割线对齐)才用 px
<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/ic_star"
    android:insetLeft="16dp"
    android:insetTop="4dp"
    android:insetRight="16dp" />

padding 的本质区别:inset 改的是 Drawable 自身绘制区域,不是 View 的内容边界

这是最常被混淆的点。android:padding 是 View 的属性,影响的是子 View 或文字内容的位置;而 inset 修改的是 Drawable 的内部绘制范围,比如一个 VectorDrawable 原本铺满整个背景,加了 insetTop="24dp" 后,它的顶部 24dp 区域就“空出来”了,实际图形只从下方开始绘制——这会影响点击热区、阴影投射、甚至 ClipPath 的计算起点。

  • 如果你发现按钮点击区域变小了,但视觉上图标没动,很可能是误用 inset 替代了 padding
  • scalerotate 等 Drawable 转换标签组合使用时,inset 总是先执行(因为它是外层容器),所以缩放基于 inset 后的尺寸
  • MaterialButton 中用 app:icon 时,若图标太小,别急着加 inset,先检查 app:iconGravityapp:iconPadding

兼容性注意:Android 5.0+ 完全支持,但 VectorDrawable 的 inset 需额外声明 tint 行为

纯色 ShapeDrawable 或 PNG 套 inset 没问题,但如果是 VectorDrawable,你会发现 tint 不生效或颜色错位。这是因为 inset 包裹后,系统默认把 tint 应用到整个包裹容器,而不是内部 vector。解决方案是在 inset 外再套一层 rippleselector,或者改用 android:drawableTint 属性(API 23+)而非 tint 属性。

  • 低于 API 21 的设备无法解析 inset,会直接 crash(Resources$NotFoundException),必须提供 drawable-v21/ 专用资源
  • 使用 AppCompatDelegate.setCompatVectorFromSourceEnabled(true) 可缓解部分 vector 兼容问题,但不解决 inset 本身
  • 动态创建 inset drawable 时,要用 InsetDrawable 构造函数,传入原始 drawable 和 Rect 边界,别用 getDrawable(R.drawable.xxx) 直接取——后者在 Android 9+ 上可能返回缓存实例,导致 inset 参数失效
事情说清了就结束。真正难的不是写对那几行 XML,而是想清楚:你到底要缩放内容区域,还是挪动绘制起点。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
resource是什么文件
resource是什么文件

Resource文件是一种特殊类型的文件,它通常用于存储应用程序或操作系统中的各种资源信息。它们在应用程序开发中起着关键作用,并在跨平台开发和国际化方面提供支持。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

181

2023.12.20

pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1948

2024.04.01

xml怎么变成word
xml怎么变成word

步骤:1. 导入 xml 文件;2. 选择 xml 结构;3. 映射 xml 元素到 word 元素;4. 生成 word 文档。提示:确保 xml 文件结构良好,并预览 word 文档以验证转换是否成功。想了解更多xml的相关内容,可以阅读本专题下面的文章。

2119

2024.08.01

xml是什么格式的文件
xml是什么格式的文件

xml是一种纯文本格式的文件。xml指的是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。想了解更多相关的内容,可阅读本专题下面的相关文章。

1171

2024.11.28

css中的padding属性作用
css中的padding属性作用

在CSS中,padding属性用于设置元素的内边距。想了解更多padding的相关内容,可以阅读本专题下面的文章。

176

2023.12.07

android开发三大框架
android开发三大框架

android开发三大框架是XUtil框架、volley框架、ImageLoader框架。本专题为大家提供android开发三大框架相关的各种文章、以及下载和课程。

338

2023.08.14

android是什么系统
android是什么系统

Android是一种功能强大、灵活可定制、应用丰富、多任务处理能力强、兼容性好、网络连接能力强的操作系统。本专题为大家提供android相关的文章、下载、课程内容,供大家免费下载体验。

1819

2023.08.22

android权限限制怎么解开
android权限限制怎么解开

android权限限制可以使用Root权限、第三方权限管理应用程序、ADB命令和Xposed框架解开。详细介绍:1、Root权限,通过获取Root权限,用户可以解锁所有权限,并对系统进行自定义和修改;2、第三方权限管理应用程序,用户可以轻松地控制和管理应用程序的权限;3、ADB命令,用户可以在设备上执行各种操作,包括解锁权限;4、Xposed框架,用户可以在不修改系统文件的情况下修改应用程序的行为和权限。

2137

2023.09.19

Python异步编程与Asyncio高并发应用实践
Python异步编程与Asyncio高并发应用实践

本专题围绕 Python 异步编程模型展开,深入讲解 Asyncio 框架的核心原理与应用实践。内容包括事件循环机制、协程任务调度、异步 IO 处理以及并发任务管理策略。通过构建高并发网络请求与异步数据处理案例,帮助开发者掌握 Python 在高并发场景中的高效开发方法,并提升系统资源利用率与整体运行性能。

37

2026.03.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号