官方文档

/Myselfcomponent/res/values/attrs.xml

<?xmlversion="1.0"encoding="utf-8"?><resources><declare-styleablename="MyView"><attrname="textColor"format="color"/><attrname="textSize"format="dimension"/><attrname="text"format="string"></attr></declare-styleable></resources>

activity_main.xml

<RelativeLayoutxmlns: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: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="com.example.myselfcomponent.MainActivity"xmlns:my="http://schemas.android.com/apk/res/com.example.myselfcomponent"><com.example.myselfcomponent.MyViewandroid:id="@+id/MyView1"android:layout_width="match_parent"android:layout_height="wrap_content"my:textColor="#00ffff"my:textSize="20sp"my:text="自定义组件"/></RelativeLayout><!--my:textColor="#00ffff"的前缀跟命名空间有关系(tools:context="com.example.myselfcomponent.MainActivity"xmlns:my="http://schemas.android.com/apk/res/com.example.myselfcomponent">),可以自定义-->

MyView

packagecom.example.myselfcomponent;importandroid.R.integer;importandroid.R.style;importandroid.content.Context;importandroid.content.res.TypedArray;importandroid.graphics.Canvas;importandroid.graphics.Color;importandroid.graphics.Paint;importandroid.graphics.Paint.Style;importandroid.graphics.Rect;importandroid.util.AttributeSet;importandroid.view.View;/***自定义组件**/publicclassMyViewextendsView{//画笔Paintpaint;Stringtext;publicMyView(Contextcontext){super(context);paint=newPaint();paint.setColor(Color.BLACK);paint.setTextSize(28);//TODOAuto-generatedconstructorstub}publicMyView(Contextcontext,AttributeSetattrs){//TODOAuto-generatedconstructorstubsuper(context,attrs);paint=newPaint();TypedArraytypedArray=context.obtainStyledAttributes(attrs,R.styleable.MyView);intcolor=typedArray.getColor(R.styleable.MyView_textColor,0xFFFFFF);floatsize=typedArray.getDimension(R.styleable.MyView_textSize,20);text=typedArray.getString(R.styleable.MyView_text);paint.setColor(color);paint.setTextSize(size);//关闭资源typedArray.recycle();}/***初始化组件时被触发,进行组件的渲染*Canvas画布**/@OverrideprotectedvoidonDraw(Canvascanvas){//TODOAuto-generatedmethodstubsuper.onDraw(canvas);//设置画笔风格为实心paint.setStyle(Style.FILL);//绘制正方形canvas.drawRect(newRect(10,10,90,90),paint);paint.setColor(Color.BLUE);canvas.drawText(text,10,110,paint);}}

MainActivity

packagecom.example.myselfcomponent;importandroid.app.Activity;importandroid.os.Bundle;importandroid.view.Menu;importandroid.view.MenuItem;publicclassMainActivityextendsActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}@OverridepublicbooleanonCreateOptionsMenu(Menumenu){//Inflatethemenu;thisaddsitemstotheactionbarifitispresent.getMenuInflater().inflate(R.menu.main,menu);returntrue;}@OverridepublicbooleanonOptionsItemSelected(MenuItemitem){//Handleactionbaritemclickshere.Theactionbarwill//automaticallyhandleclicksontheHome/Upbutton,solong//asyouspecifyaparentactivityinAndroidManifest.xml.intid=item.getItemId();if(id==R.id.action_settings){returntrue;}returnsuper.onOptionsItemSelected(item);}}