Android自定义控件打包,方便项目上使用

   
方式一:将项目打包成jar包 方式二:项目作为一个library

     设计自定义的控件对android开发人员来说,是家常便饭了,但是多次做项目的经验证明了一个道理,自定义的控件,可以在其他项目中,多次使用,所以接下来我们来介绍2种常用的打包方式,并讨论他们的利于病。

我们可以假设想要自定义一个改变文字显示的button(纯属假设,这样简单的功能其实也用不着自定义)

 首先写好布局文件mybutton.xml


     
    
 
    
 

再完成控制类 MyProgressBar.java

package com.swastika.mywidget;
 
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
public class MyProgressBar extends LinearLayout {
 
    private ImageView imageView;
    private TextView  textView;
    boolean flag = true;
     
    public MyProgressBar(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
    }
    public MyProgressBar(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
        LayoutInflater 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() {
             
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                if(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);  
    }  
 
     
}
这样只要引入控件com.swastika.mywidget.MyProgressBar,便可以实现功能了。下面就要介绍打包方式了。

方式一:将项目打包成jar包

    1右击项目,选择export,选择java中的jar如图

Android自定义控件打包,方便项目上使用_第1张图片

                                     图 01

      勾选出自定义控件相关文件,如图02

Android自定义控件打包,方便项目上使用_第2张图片

                                     图02

选好后选择finish就完成了导出,

在使用的时候,将要jar包放到新的项目中的libs文件中(一般会自动引入,如果没有自动引入可以右击该包然后选择Build path,再选择add to build path就可以了),

Android自定义控件打包,方便项目上使用_第3张图片

                 图 03

在新项目布局文件中加入自定义控件;

布局文件main.xml


 
    
     
        
 

不过运行的时候会发生错误java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.androidtest/com.example.androidtest.MainActivity}: android.view.InflateException: Binary XML file line #16: Error inflating class com.swastika.mywidget.MyProgressBar,


原因是jar打包后放在drawable中的图片资源无法找到了,,,解决的方式就是将图片等资源文件放在assets文件夹中,再在java代码中映射出来找到资源,这就增加的工作负担,所以通常在使用自定义控件的时候不用这种方式,而是采用下面将要介绍的第二种方式,

优势:jar打包方式,可以用在不使用图片资源的项目中,封装算法等特别方便,便于其他人使用,

劣势:失去了索引,无法使用drawable中的图片资源,封装后的代码修改起来麻烦


方式二:项目作为一个library

    在设计自定义控件的时候,在新建时可以选择将项目作为library(如图04),也可以之后进行设置

Android自定义控件打包,方便项目上使用_第4张图片

                                            图 04

右击项目。选择android,再勾选出Is Library即可(如图05);

Android自定义控件打包,方便项目上使用_第5张图片

                                          图 05

这样便可以使用drawable中的图片资源了,不过需要特别注意的是,自定义控件中的图片名称与新项目中的图片资源不能重名,需要自己检查一下(自定义控件中的默认图标ic_launcher.png需要删除掉,不然会报错,经试验xml文件可以重名)

优势:可以使用drawable中的图片资源了,现在google官网上介绍的就是这种方式,简单方便。





你可能感兴趣的:(Android自定义控件打包,方便项目上使用)