自定义控件打包成jar包来使用与作为library工程使用
来源:互联网 发布:网桥mac地址修改 编辑:程序博客网 时间:2024/05/12 15:45
在现实开发中会经常使用开源库来实现项目需求,这些开源库有些是jar包,有些是作为library工程来使用,两者的区别是library工程使用了res的资源,打包成jar包来使用时,会出现资源找不到的错误,只能以library工程的形式提供使用。
下面通过写一个自己的自定义控件的形式来分别举例这两种方法:
1.jar包形式,新建一个android工程叫CustomViewDemo,包名为com.innskyy.customview, 新建CustomView.java,代码如下
public class CustomView extends View {private Paint paint;private Rect bounds;private String text = "android";public CustomView(Context context, AttributeSet attrs) {super(context, attrs);// TODO Auto-generated constructor stubpaint = new Paint(Paint.ANTI_ALIAS_FLAG);bounds = new Rect();}@Overrideprotected void onDraw(Canvas canvas) {// TODO Auto-generated method stubsuper.onDraw(canvas);paint.setColor(Color.BLACK);canvas.drawRect(0, 0, 200, 100, paint);paint.setColor(Color.WHITE);paint.setTextSize(30);paint.getTextBounds(text, 0, text.length(), bounds);canvas.drawText(text, 50, 50, paint);}}
编译之后,右键工程Export->JAVA->JAR file,next之后 左边去除勾选res文件夹,右边全部去除勾选,然后选择JAR file的保存路径,finish之后在指定的路径下就会生成JAR包。
在要使用CustomView的工程中,复制jar包到libs文件夹下,在布局文件中使用:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> <com.innskyy.customview.CustomView android:id="@+id/custom_view" android:layout_width="200dp" android:layout_height="200dp" /></LinearLayout>
java代码中同样通过findViewById(R.id.custom_view)方法来找到此控件对象。
2. library工程形式,修改CustomViewDemo工程中CustomView.java的代码如下:
public class CustomView extends LinearLayout {private ImageView imageView;private TextView textView;boolean flag = true;public CustomView(Context context) {super(context);// TODO Auto-generated constructor stub}public CustomView(Context context, AttributeSet attrs) {super(context, attrs);// TODO Auto-generated constructor stubLayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);inflater.inflate(R.layout.mybutton, this);imageView = (ImageView) findViewById(R.id.imageView1);textView = (TextView) findViewById(R.id.textView1);textView.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubif (flag) {textView.setText("取消");flag = false;} else {textView.setText("确定");flag = true;}}});}/** * 设置图片资源 */public void setImageResource(int resId) {imageView.setImageResource(resId);}/** * 设置显示的文字 */public void setTextViewText(String text) {textView.setText(text);}}
mybutton.xml 代码如下
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/imageView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:paddingLeft="20dp" android:src="@drawable/button" /> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_toRightOf="@id/imageView1" android:layout_marginLeft="10dp" android:text="确定" android:textColor="#000000" /> </RelativeLayout>
drawable中button资源随便找一个代替,编译完成后,工程右键Properties->Android右侧 Is Library 前面勾选上,然后Apply, OK 之后,CustomViewDemo就作为一个Library工程存在。
在要使用CustomView的工程中,工程右键Properties->Android右侧 Add 选择CustomViewDemo,然后Apply, OK 之后, 在布局文件如下使用:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> <com.innskyy.customview.CustomView android:id="@+id/custom_view" android:layout_width="200dp" android:layout_height="200dp" /></LinearLayout>
同样,java代码中同样通过findViewById(R.id.custom_view)方法来找到此控件对象。
以上为自定义控件作为外接形式使用的两种方式,那此处需要注意的是,当把第二个例子的CustomVIewDemo也使用第一种方式来导出JAR包,那么使用时会出现找不到资源的错误,类似android.content.res.Resources%24NotFoundException,这是由于在CustomView的构造方法中
inflater.inflate(R.layout.mybutton, this);这一句找不到mybutton对应的R资源,因为mybutton对应的R资源在CustomViewDemo工程中保存,在使用CustomView这个控件的新工程中找不到,所以会报错,总结起来还是文章开头的那句话,引用了资源文件的自定义控件要通过Library工程的方式提供给其他工程使用。
0 0
- 自定义控件打包成jar包来使用与作为library工程使用
- 使用Gradle生成library工程的jar包
- Android项目怎么使用外部工程作为jar包
- Android项目怎么使用外部工程作为jar包
- 如何使用Eclipse将包含第三方jar库的java工程打包成jar包
- 使用Library管理Jar包
- Android Library Project工程导出jar包供其它工程使用
- 使用gradle打包jar包
- 使用gradle打包jar包
- android导入jar包,打包成jar包,打包成library,导入library项目
- android引入JAR包,打包成JAR包,打包成Library项目,导入Library项目
- 将java工程打包成jar包
- [JAR包] android引入JAR包,打包成JAR包,打包成Library项目,导入Library项目
- [JAR包] android引入JAR包,打包成JAR包,打包成Library项目,导入Library项目
- [JAR包] android引入JAR包,打包成JAR包,打包成Library项目,导入Library项目
- [JAR包] android引入JAR包,打包成JAR包,打包成Library项目,导入Library项目
- [JAR包] android引入JAR包,打包成JAR包,打包成Library项目,导入Library项目
- [JAR包] android引入JAR包,打包成JAR包,打包成Library项目,导入Library项目
- VS2015 C#6.0 中的那些新特性
- JAVA DES加密解密示例
- 手机访问网站自动跳转到手机版
- Ubuntu12.04 之 CUDA 编程 (二)
- awk命令详解
- 自定义控件打包成jar包来使用与作为library工程使用
- 程序员如何快速准备面试中的算法
- https、SSL与数字证书介绍
- Struts 小结
- java的play framework安装配置
- mysqldump
- 黑马程序员—java基础学习--IO ( Input Output )流(一)
- Android搭建开发环境
- java中的深复制和浅复制