在Android源码中扩展自定义View的方法


作者: yuanquan.xu


笔者在开发应用中,有时需要实现自定义滚动的控件,Android提供的NumberPicker可以满足基本功能,但实际上扩展起来,各种不方便。比如,显示行数固定为3行且无法更改,很多变量和attr是私有类型或者系统隐藏类型,无法直接在xml中定义,等等等等。因此,针对目前项目中在Eclipse进行开发,通过源码编译进行系统集成的情况,本文主要提出了一种通过源码编译库,实现对系统Widget扩展的方法。

在系统Widget里,有很多属性和方法是hide的,使用eclipse会因为找不到这些属性而编译失败。如果使用Eclipse来扩展,比较快的方法是删除或替换这些方法,但这些可能造成某些功能的缺失或其他不稳定因素。而使用源码编译成jar,可以尽可能地保留这些代码并实现扩展接口。实现在app中自定义而不需要对framework进行修改。

         以自定义NumberPicker为例,扩展一个View主要有以下的步骤:

1、   在Eclipse新建一个空的Android项目,保留AndroidManifest.xml,删除src目录。

2、   从framework找到NumberPicker.java和Scroll.java,修改包名并复制到项目中的java目录下。用java替换掉src的原因,是可以方便地进行编辑,但不会被eclipse编译,虽然强编也编不过。

3、   从framework找到和NumberPicker相关的drawable和attr,复制到项目的res相应目录下。

4、   修改Android.mk,对代码做相应的调整,编译模块。以下是Android.mk的关键修改:

LOCAL_RESOURCE_DIR:= $(LOCAL_PATH)/res               --添加资源文件,

LOCAL_MODULE :=com.android.widget.tpv                --定义模块名,编译成功后需要通过这个名字找到相应的jar

LOCAL_SRC_FILES :=$(call all-java-files-under, java)         --对java目录下的java文件进行扫描,生成class

include$(BUILD_STATIC_JAVA_LIBRARY)                  --声明生成jar库,在eclipse通过导入jar实现引用

5、   在源码下调试,编译,然后根据提示,找到相应的jar,放到项目的libs,使得Eclipse可以通过源码编译生成的jar

6、   修改Eclipse的库工程的属性,在Eclipse->Project->Properties->Android->勾选Is Library,并在主工程包含它,使得通过Eclipse可以编译依赖库的资源的jar

7、   修改主工程的Android.mk,添加依赖库的引用。调试,编译。

 

总结:本文介绍了一种在不修改Framework,通过Android源码编译,实现在Eclipse扩展Widget的方法。通过这种方法,在牺牲系统升级的情况下, 以最小的修改来实现对Widget的定制和扩展。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值