解决问题:resource IDS cannot be used in a switch statement in Android library

文章讲述了在Androidlibrarymodule中使用switch语句处理资源ID时会遇到的问题,即不能将资源ID作为case值,因为它们在librarymodule的R文件中不是final类型。解决方案是将switch语句替换为if-else结构,AndroidStudio提供了快捷方式帮助完成这个转换。
摘要由CSDN通过智能技术生成

# 发现问题

在抽取lib的时候发现了这样一个问题,如图所示:

1. 很正常的onClick事件的处理,使用的swtich语句,但是却报了resource IDS cannot be used in a switch statement in Android library这个问题,原因是...

2. android项目的library module里不能使用资源ID作为switch语句的case值。

3. 为什么呢?因为switch里的case值必须是常数,而在library module的R文件里ID的值不是final类型的,但是主module的R文件里的ID值是final类型的

4. 所以主module里可以用资源ID作为case值而library module却不能。

# 解决方案

1. 用if-else替换switch

2. 快捷键:选中switch或者case语句,按Option+Return(Mac),Alt+Enter(Windows)

3. 选择Replace ‘switch’ witch ‘if’即可

4. 这样就自动替换好啦。

Android library module中switch语句遇到的坑,你跌了吗?

看到标题你可能会模棱两可,博主又在卖什么关子啦,好了,玩笑到此结束进入正题。前两天在写library module的时候我确实掉坑了,今天就写出来拯救你们啊,哈哈。

一般我们在写代码时如果有多个if..else都喜欢用switch语句,尤其在Android中的onClick事件中,会处理多个控件的监听事件,通常在这时候使用switch都挺顺手的,代码简洁整齐。but,如果你在library module中这么写,可能会报一个这样的错误: Validates using resource IDs in a switch statement in Android library module….

what???

我错了吗?在switch语句中使用int不要太正常啊,一脸黑线对不对,其实你还真错了,翻译一下那句话的意思啊:在android项目的library module里不能使用资源ID作为switch语句的case值。为什么呢?因为switch里的case值必须是常数,而在library module的R文件里ID的值不是final类型的,但是主module的R文件里的ID值是final类型的,所以主module里可以用资源ID作为case值而library module却不能。

那问题怎么解决呢?把switch-case转成if-else呗。

在Android Studio中选中switch,按Option+Return(Mac),Alt+Enter(Windows),选择Replace ‘switch’ witch ‘if’即可。

您可以尝试以下方法解决 `AAPT: error: resource android:attr/dialogCornerRadius not found` 错误: 1. 升级 minSdkVersion 将您的应用的 minSdkVersion 升级到 28 或更高版本,这样就可以使用 `dialogCornerRadius` 属性。您可以将 `minSdkVersion` 添加到您的应用程序的 build.gradle 文件中: ``` android { defaultConfig { minSdkVersion 28 // ... } // ... } ``` 2. 使用最新的 Android SDK 确保您正在使用最新版本的 Android SDK 和构建工具。可以通过 Android Studio 的 SDK Manager 来下载和安装最新版本的 SDK。 3. 避免使用 `dialogCornerRadius` 属性 如果您不想升级 `minSdkVersion`,则可以避免使用 `dialogCornerRadius` 属性。您可以使用其他属性来自定义对话框的外观,例如 `android:background` 和 `android:padding`。 4. 手动定义 `dialogCornerRadius` 属性 如果您仍然想使用 `dialogCornerRadius` 属性,可以手动将其定义为一个整数值。在您的应用程序的 `res/values` 文件夹中创建一个名为 `attrs.xml` 的文件,并将以下代码添加到文件中: ``` <?xml version="1.0" encoding="utf-8"?> <resources> <attr name="dialogCornerRadius" format="integer" /> </resources> ``` 然后,在您的应用程序的布局文件中使用 `dialogCornerRadius` 属性,如下所示: ``` <androidx.appcompat.widget.AppCompatButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/my_custom_dialog_bg" android:text="Click me" android:textColor="#000000" app:dialogCornerRadius="8" /> ``` 这里的 `my_custom_dialog_bg` 是一个自定义的 drawable 资源文件,它定义了对话框的外观。您可以根据自己的需要进行更改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值