Android Studio 提示Use app:drawableStartCompat instead of android:drawableStart

每次提交代码时,AS这个老妈子总爱唠叨一堆warning,这些Warning都在讲什么?
在这里插入图片描述

1.Use app:drawableStartCompat instead of android:drawableStart

在Android开发中,android:drawableStartapp:drawableStartCompat是两个用于设置视图(如TextView)起始位置的drawable资源的属性。它们的区别主要涉及对从右到左(RTL)支持的兼容性以及不同版本的Android系统。

  • android:drawableStart: 这个属性只在API级别17及以上(Android 4.2 Jelly Bean开始)提供原生支持。它允许你为一个视图指定一个Drawable来显示在文本的起始位置,考虑到了RTL布局方向。

  • app:drawableStartCompat: 这是AppCompat库提供的一个属性,它是一个向后兼容的版本,可以在所有API级别上工作。当使用较旧版本的Android时,app:drawableStartCompat确保RTL支持能够适当地应用。这个属性是通过支持库(Support Library或AndroidX)提供的,并且需要与AppCompat控件一起使用。

如果你不使用app:drawableStartCompat替换android:drawableStart,可能存在以下隐患:

  1. 缺乏向后兼容性:在API级别低于17的设备上运行时,android:drawableStart不会被识别,因此Drawable将不会按预期出现在视图的起始位置。
  2. RTL支持问题:即使在新设备上,如果不使用AppCompat库,可能无法保证在使用RTL语言时,Drawable正确地显示在文本的起始位置。

总之,推荐使用app:drawableStartCompat来确保你的应用在所有API级别上都具有良好的兼容性,特别是在处理RTL布局和支持多种语言的情况下。要使用app:drawableStartCompat属性,你需要在项目中引入并使用AppCompat库中的控件,例如AppCompatTextView代替普通的TextView

2.When you define paddingStart’ you should probably also define ‘paddingEnd’ for right-to-left symmetry

在Android开发中,如果你为布局或视图设置了paddingStart而没有同时设置paddingEnd,可能会导致在使用从右到左(RTL)布局的语言时界面显示不一致或不对称。例如,阿拉伯语和希伯来语等语言是从右向左书写的,因此它们的布局方向也是从右到左的。

paddingStartpaddingEnd属性分别对应于视图的起始和结束边距,在LTR(从左到右)布局中,paddingStart相当于左边距,paddingEnd相当于右边距。但在RTL布局中,这两个属性的作用是颠倒的:paddingStart表示右边距,而paddingEnd表示左边距。

如果你只设置了paddingStart,则在RTL布局下视图将只有右侧的内边距,没有左侧的内边距,这可能导致布局看起来不平衡或者错位。为了确保布局在所有语言和方向下都能正确显示,最好同时设置paddingStartpaddingEnd

例子:

<TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/hello_world"android:paddingStart="16dp"android:paddingEnd="16dp" />

在上面的代码中,无论用户设备的布局方向如何,文本视图两侧都有相同量的内边距,从而保证了对称性和一致性。

总结来说,如果不同时设置paddingStartpaddingEnd,就会存在以下几点隐患:

  1. 布局不对称:在RTL布局下,视图可能会缺少预期的边距,导致视觉不平衡。
  2. 多语言支持差:对于支持多种语言的应用程序,不考虑RTL布局可能会给使用RTL书写系统的用户带来糟糕的体验。
  3. 可维护性问题:未来如果需要添加对RTL语言的支持,可能需要返回并修复所有仅定义了paddingStart的地方,增加了维护工作量。

说实话,上述的前两点隐患 我不太赞同,因为我试了 没问题。

3.Warning:(62, 22) Resource IDs will be non-final by default in Android Gradle Plugin version 8.0, avoid using them in switch case statements

Android开发中,资源ID(例如R.id.my_view)通常被用于识别和引用布局文件、菜单、字符串等的特定元素。在Android Gradle插件版本7.x及更早版本中,这些资源ID是final的,这意味着它们在编译时就已经确定,并且不会改变。因此,开发者可以安全地在switch语句中使用它们。

然而,Android Studio提供的警告信息表明,在未来的Android Gradle插件版本8.0中,资源ID将不再默认为final。这一变化意味着资源ID可能在运行时被修改,因此它们不能保证在编译时就已经是常量。由于switch语句要求case标签是编译时常量,这个更改将使得在switch语句中直接使用资源ID会引发编译错误。

如果你的代码中包含了类似以下的结构:

switch (view.getId()) {case R.id.view_one:// 处理view_onebreak;case R.id.view_two:// 处理view_twobreak;// 更多的case...
}

在Android Gradle插件版本8.0中,这段代码就会出问题。当资源ID不再是final时,上述代码需要重写以避免编译错误。替代的做法可能包括使用if-else语句或其他逻辑处理方式来代替switch语句:

int id = view.getId();
if (id == R.id.view_one) {// 处理view_one
} else if (id == R.id.view_two) {// 处理view_two
} // 更多的else-if...

总结一下,这个警告的隐患如下:

  1. 代码兼容性:未来版本的Android Gradle插件将破坏现有使用switch语句的代码。
  2. 必须进行代码迁移:开发者需要在升级到新版本的插件之前更新他们的代码,以避免编译错误。
  3. 潜在的重构工作:对于大型项目或者广泛使用了switch语句的代码库,这可能是一项重大的重构工作。

为了准备未来的变化,建议开发者开始从现在起避免在switch语句中使用资源ID,尤其是准备升级到Android Gradle插件版本8.0时。
详见《Android Gradle Plugin 8.0 为啥不支持Resource ID final》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/244832.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数学建模】综合评价方法

文章目录 综合评价的基本理论和数据预处理综合评价的基本概念综合评价体系的构建综合指标的预处理方法评价指标预处理示例 常用的综合评价数学模型线性加权综合评价模型TOPSIS法灰色关联度分析熵值法秩和比&#xff08;RSR&#xff09;法综合评价示例 综合评价的基本理论和数据…

安全基础~攻防特性3

文章目录 SSTI(模板注入)1. 简介2. 成因3. 常见框架存在注入4. 判断存在SSTI SSTI(模板注入) 1. 简介 (Server-Side Template Injection) 服务端模板注入 1、使用框架&#xff08;MVC的模式&#xff09;&#xff0c;如python的flask&#xff0c;php的tp&#xff0c;java的sp…

imgaug库图像增强指南(32):塑造【雪景】效果的视觉魔法

引言 在深度学习和计算机视觉的世界里&#xff0c;数据是模型训练的基石&#xff0c;其质量与数量直接影响着模型的性能。然而&#xff0c;获取大量高质量的标注数据往往需要耗费大量的时间和资源。正因如此&#xff0c;数据增强技术应运而生&#xff0c;成为了解决这一问题的…

JAVA的面试题四

1.电商行业特点 &#xff08;1&#xff09;分布式&#xff1a; ①垂直拆分:根据功能模块进行拆分 ②水平拆分:根据业务层级进行拆分 &#xff08;2&#xff09;高并发&#xff1a; 用户单位时间内访问服务器数量,是电商行业中面临的主要问题 &#xff08;3&#xff09;集群&…

C语言——联合和枚举

目录 一、联合体 1.1 联合体类型的声明 1.2 联合体的特点 1.3 相同成员的结构体和联合体对比 1.4 联合体大小的计算 1.5 联合的⼀个练习 二、枚举类型 2.1 枚举类型的声明 2.2 枚举类型的优点 2.3 枚举类型的使用 一、联合体 1.1 联合体类型的声明 像结构体⼀样…

支付宝小程序开发踩坑笔记(支付宝、学习强国小程序)

1、接口请求安卓端回调 success&#xff0c;IOS 端回调 fail 原因&#xff1a;dataType 设置不对&#xff0c;默认是 json 格式&#xff0c;对返回数据会进行 json 解析&#xff0c;如果解析失败&#xff0c;就会回调 fail 。加密传输一般是 text 格式。 2、input 禁止输入空格…

利用tpu-mlir工具将深度学习算法模型转成算能科技平台.bmodel模型的方法步骤

目录 1 TPU-MLIR简介 2 开发环境搭建 2.1 下载镜像 2.2 下载SDK 2.3 创建容器 2.4 加载tpu-mlir 3 准备工作目录 4 onnx转mlir文件 5 mlir转INT8 模型 5.1 生成校准表 5.2 便以为INT8对称量化模型 参考文献&#xff1a; 之前是用nntc转算能科技的模型的&#xff0c…

网易有道BCEmbedding:双语检索与RAG的完美融合

前言 随着人工智能技术的飞速发展&#xff0c;语义表征和检索增强生成&#xff08;Retrieval Augmented Generation, RAG&#xff09;在各个领域的应用日益广泛。在这样的背景下&#xff0c;网易有道推出了划时代的BCEmbedding模型&#xff0c;这不仅是一次技术的革新&#xf…

如何自己实现一个Spring Boot Starter

现在很多开源的组件都会提供对应的 springboot-starter 包给我们去用&#xff0c;要做一个 starter 包并不难。参照Spring内置的实现就好了&#xff1a; 1、在工程里引入 starter 打包相关的依赖。 2、在我们工程内建 spring.factories 文件&#xff0c;编写我们配置类的全限类…

【芯片设计- RTL 数字逻辑设计入门 番外篇6 -- 术语 Tile 介绍】

文章目录 TILE 介绍Tile 的特点Tile 架构的应用Tile 基础架构示例 TILE 介绍 在系统级芯片&#xff08;System on Chip, SoC&#xff09;设计中&#xff0c;“tile” 是一个可以指代不同概念的术语&#xff0c;但通常它指的是芯片上的一个独立的功能单元或核心。一个 tile 可以…

【论文+App试玩+图像到视频】2311.Animate-anyone:上传1张图片为任何人制作动画(用于角色动画的一致且可控的图像到视频合成)(暂未开源)

项目主页&#xff1a;https://humanaigc.github.io/animate-anyone/ 论文: Animate Anyone: Consistent and Controllable Image-to-Video Synthesis for Character Animation 摩尔线程复现代码&#xff1a;https://github.com/MooreThreads/Moore-AnimateAnyone 原作者讲解&am…

【华为 ICT HCIA eNSP 习题汇总】——题目集6

1、IEEE 802.11g 标准支持的最大协商速率为&#xff08;&#xff09;。 A、300Mbps B、150Mbps C、54Mbps D、1200Mbps 考点&#xff1a;无线局域网 解析&#xff1a;&#xff08;C&#xff09; IEEE 802.11系列标准如下表&#xff1a; 标准数据传输速率主要技术IEEE 802.111M…

Wordpress seo优化该怎么做?

Wordpress作为开源管理系统&#xff0c;目前已然是世界上最流行的cms之一&#xff0c;这不仅仅因为他开源&#xff0c;对用户友好&#xff0c;让任何人都能轻而易举的制作网站&#xff0c;更是因为这套程序对于搜索引擎非常友好&#xff0c;是做谷歌seo的不二之选 Wordpress作为…

YOLOv5改进 | Conv篇 | 利用YOLO-MS的MSBlock轻量化网络结构(既轻量又长点)

一、本文介绍 本文给大家带来的改进机制是利用YOLO-MS提出的一种针对于实时目标检测的MSBlock模块(其其实不能算是Conv但是其应该是一整个模块),我们将其用于C2f中组合出一种新的结构,来替换我们网络中的模块可以达到一种轻量化的作用,我将其用于我的数据集上实验,包括多个…

app逆向-frida安装调试

文章目录 一、前言二、安装三、hook调试&#xff0c;hook java类 一、前言 frida是一款基于python javascript 的hook框架&#xff0c;可运行在android ios linux winosx等各平台&#xff0c;主要使用动态二进制插桩技术 官方网站&#xff1a;https://frida.re/docs/home/ a…

绝地求生:PUBG服务条款修订,是否因为PLAYERUNKNOWN礼包导致?

嗨&#xff0c;我是闲游盒~ PUBG全球的官网&#xff0c;刚刚更新了一条《PUBG: 绝地求生》。 通知内容大概如下 对所有平台的PUBG的服务条款进行修订&#xff0c;修订安排于2月7日后生效。 从修订的条款内容猜测&#xff0c;本次修订安排是因为PLAYERUNKNOWN礼包 记得预约荣…

C++ STL之list的使用及模拟实现

文章目录 1. 介绍2. list类的使用2.1 list类对象的构造函数2.2 list类对象的容量操作2.3 list类对象的修改操作2.4 list类对象的访问及遍历操作 3. list类的模拟实现 1. 介绍 英文解释&#xff1a; 也就是说&#xff1a; list是可以在常数范围内在任意位置进行插入和删除的序列…

单点登陆(SSO)基于CAS实现前后端分离的SSO系统开发「IDP发起」

关于其他前端常见登录实现单点登录方案&#xff0c;请见「前端常见登录实现方案 单点登录方案 」 前沿 单点登录&#xff08;SSO&#xff09;&#xff0c;英文全称为 Single Sign On。 SSO 是指在多个应用系统中&#xff0c;用户只需要登录一次&#xff0c;就可以访问所有相互…

macbookpro可以玩什么游戏

最近几年苹果在游戏领域的动作越来越频繁&#xff0c;在当地时间6月6日举行的的WWDC 2023上还请来了小岛秀夫和他的《死亡搁浅导演剪辑版》到现场为苹果电脑站台。事实上&#xff0c;在不久的将来&#xff0c;我们还真有机会看到越来越多Windows上的大作运行在搭载苹果M系列芯片…

旅游项目day14

其他模块数据初始化 搜索实现 请求一样&#xff0c;但是参数不一样&#xff0c;根据type划分。 后台需要提供一个搜索接口。 请求分发器&#xff1a; 全部搜索 目的地搜索 精确搜索、无高亮展示 攻略搜索 全文搜索、高亮显示、分页 游记搜搜 用户搜索 丝袜哥