好长时间没有更新博客了。本来想积累点有深度的东西发,但一直没有找到非常好的点。所以。写一些基础的东西。就当积累吧。


Android开发中难免会用到自己定义的组件。以下以ImageButton为例来介绍怎么自己定义组件和它的属性:




第一步、在values/attrs.xml中为组件自己定义属性:


<?xml version="1.0" encoding="utf-8"?>


<resources>


    <declare-styleable name="CustomBtn">


        <attr name="text" format="string"/>


        <attr name="textColor" format="color" />


        <attr name="textSize" format="dimension" />


    </declare-styleable>


</resources>




第二步、重写ImageButton类:


public class CustomBtn extends ImageButton


{


 private Paint paint;


 private String text;


 


 public CustomBtn(Context context, AttributeSet attrs)


 {


  super(context, attrs);


 


  paint=new Paint();


  TypedArray typeArray=context.obtainStyledAttributes(attrs,R.styleable.CustomBtn);


  int color=typeArray.getColor(R.styleable.CustomBtn_textColor,Color.WHITE);


  float textSize=typeArray.getDimension(R.styleable.CustomBtn_textSize,20);


  text=typeArray.getString(R.styleable.CustomBtn_text);


 


  paint.setTextAlign(Align.CENTER);


  paint.setColor(color);


  paint.setTextSize(textSize);


  typeArray.recycle();


 }


 


 @Override


 protected void onDraw(Canvas canvas)


 {


  super.onDraw(canvas);


  canvas.drawText(text,canvas.getWidth()/2,canvas.getHeight()/2+10, paint);


 }




 public String getText() {


  return text;


 }




 public void setText(String text) {


  this.text = text;


 }


}




第三步、在布局文件里使用CustomBtn:


当中xmlns:custombtn中为AndroidManifest.xml中的包名




<?xml version="1.0" encoding="utf-8"?>


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"


xmlns:custombtn="http://schemas.android.com/apk/res/com.yeahis.shuyudragstore"


xmlns:tools="http://schemas.android.com/tools"


android:layout_width="match_parent"


android:layout_height="@dimen/market_category_height"


android:background="@drawable/mall_category_item">




<com.yeahis.shuyudragstore.widget.CustomBtn


android:id="@+id/mall_category_btn"


android:layout_width="wrap_content"


android:layout_height="wrap_content"


android:layout_alignParentTop="true"


android:layout_alignParentLeft="true"


android:background="@android:color/transparent"


android:src="@drawable/mall_category_title"


custombtn:text="@string/mall_category_title"


custombtn:textColor="@android:color/black"


custombtn:textSize="15sp"/>




</RelativeLayout>




第四步、假设想要在程序中动态改变CustomBtn上的文字则在程序中这样:


比如CustomBtn customBtn=(CustomBtn) convertView.findViewById(R.id.mall_category_btn);




customBtn.setText("在程序中加入的文字");