framework开发过程中遇到的与资源有关的问题

在4.0平台定制Widget开发过程中,作者遇到了资源ID冲突的问题,导致按钮控件转换后变为复选框。文章详细分析了资源添加过程、R.java文件配置以及SDK编译原理,揭示了style和theme添加规则的重要性。通过深入探讨,作者最终找到了问题根源并解释了系统代码使用资源的方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       在4.0平台定制widget开发过程中,因为要往源码中加入资源,遇到一个问题,问题的log没有记录下来,大体上就是讲,类型转换有问题。比如,一个button控件,findViewById后,转换类型当然要为button,但是根据这个button找到的控件,嘿,它不是button,它是个checkbox。这就有问题。有问题当然是要去找为什么会发生问题。经过R.java的查找,发现这两个控件的资源id是相邻的,比如button的id是42,checkbox的id就是43。

      先来看看我都加了些什么资源:8张图片,放到drawable里面,类型style,主题theme还有attr,供上层使用的id在public.xml里面定义了。

      我是怎么加的呢?图片直接定义为对应功能名字,这个没什么问题。style放到了styles.xml中间;主题theme也放到了theme.xml中间。public.xml中添加放到最后,数值为相应类型最大值然后+1。

      找来找去,在style.xml和theme.xml的文件中发现这样一段话:


<!--
===============================================================
                        PLEASE READ
===============================================================

The Holo themes must not be modified in order to pass CTS.
Many related themes and styles depend on other values defined in this file.
If you would like to provide custom themes and styles for your device,
please see styles_device_defaults.xml.

===============================================================
                        PLEASE READ
===============================================================
 -->

 这段话我在2.3源码中是没有看到的。也就是我把style和theme加到人家说你别加的地方,出了点问题。

      通过看SDK编译出的android.jar中R.java可以知道,R.java中的资源都是在public.xml中定义提供给上层使用的。这些id值在SDK中定义的大小要与系统生成的大小一致。如何一直,当然就是现在的形式:赋予一个固定的值。有了这个固定静态的值,你怎么折腾都不会有问题。其它资源在aapt生成id的时候,会跳过public.xml中已经使用的值。

       除了public.xml中定义过的资源,其它的资源都是自动分配id,而且也都是在系统代码中使用的。这就是我今天的疑问所在。系统代码使用这些资源时,实际与我们app开发一样,是R.**.***这样的方式获得R.java相应的数值,并没有经过外部数值对应的转换。那如果是这样,为何出现了开头我提到的问题。style强调添加规则又是为了哪里着想?

       小妹初学乍到,所知甚少,求各位大神鼎力相助,不胜感激。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值