android自定义组件实现方法
本文实例讲述了android自定义组件实现方法。分享给大家供大家参考。具体如下:
atts.xml:
<?xmlversion="1.0"encoding="utf-8"?> <resources> <declare-styleablename="TopBar"> <attrname="titleText"format="string"/> <attrname="titleTextSize"format="dimension"/> <attrname="titleTextColor"format="color"/> <attrname="leftText"format="string"/> <attrname="leftBackground"format="reference|color"/> <attrname="leftTextColor"format="color"/> <attrname="rightText"format="string"/> <attrname="rightBackground"format="reference|color"/> <attrname="rightTextColor"format="color"/> </declare-styleable> </resources>
TopBar.java:
packagecom.cd.administrator.mytopbar; importandroid.annotation.TargetApi; importandroid.content.Context; importandroid.content.res.TypedArray; importandroid.graphics.drawable.Drawable; importandroid.os.Build; importandroid.util.AttributeSet; importandroid.view.Gravity; importandroid.view.View; importandroid.view.ViewGroup; importandroid.widget.Button; importandroid.widget.RelativeLayout; importandroid.widget.TextView; importandroid.widget.Toast; /** *CreatedbyAdministratoron2015/1/8. */ publicclassTopBarextendsRelativeLayout{ privateButtonleftButton,rightButton; privateTextViewtvTitle; privateintleftTextColor; privateDrawableleftBackground; privateStringleftText; privateintrightTextColor; privateDrawablerightBackground; privateStringrightText; privateinttitleTextColor; privateStringtitleText; privatefloattitleTextSize; privateLayoutParamsleftParams,rightParams,titleParams; privatetopBarClickListenerlistener; publicinterfacetopBarClickListener{ publicvoidleftClick(); publicvoidrightClick(); } publicvoidsetOnTopBarClickListener(topBarClickListenerlistener){ this.listener=listener; } @TargetApi(Build.VERSION_CODES.JELLY_BEAN) publicTopBar(finalContextcontext,AttributeSetattrs){ super(context,attrs); TypedArrayta=context.obtainStyledAttributes(attrs,R.styleable.TopBar); leftTextColor=ta.getColor(R.styleable.TopBar_leftTextColor,0); leftBackground=ta.getDrawable(R.styleable.TopBar_leftBackground); leftText=ta.getString(R.styleable.TopBar_leftText); rightTextColor=ta.getColor(R.styleable.TopBar_rightTextColor,0); rightBackground=ta.getDrawable(R.styleable.TopBar_rightBackground); rightText=ta.getString(R.styleable.TopBar_rightText); titleTextColor=ta.getColor(R.styleable.TopBar_titleTextColor,0); titleTextSize=ta.getDimension(R.styleable.TopBar_titleTextSize,0); titleText=ta.getString(R.styleable.TopBar_titleText); ta.recycle(); leftButton=newButton(context); rightButton=newButton(context); tvTitle=newTextView(context); leftButton.setTextColor(leftTextColor); leftButton.setBackground(leftBackground); leftButton.setText(leftText); rightButton.setTextColor(rightTextColor); rightButton.setBackground(rightBackground); rightButton.setText(rightText); tvTitle.setTextColor(titleTextColor); tvTitle.setTextSize(titleTextSize); tvTitle.setText(titleText); tvTitle.setGravity(Gravity.CENTER); setBackgroundColor(0xf59563); leftParams=newLayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT); leftParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT,TRUE); addView(leftButton,leftParams); rightParams=newLayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT); rightParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT,TRUE); addView(rightButton,rightParams); titleParams=newLayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.MATCH_PARENT); titleParams.addRule(RelativeLayout.CENTER_IN_PARENT,TRUE); addView(tvTitle,titleParams); leftButton.setOnClickListener(newOnClickListener(){ @Override publicvoidonClick(Viewv){ listener.leftClick(); } }); rightButton.setOnClickListener(newOnClickListener(){ @Override publicvoidonClick(Viewv){ listener.rightClick(); } }); } }
activity_main.xml:
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android" xmlns:custom="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin"tools:context=".MainActivity"> <com.cd.administrator.mytopbar.TopBar android:id="@+id/topBar" android:layout_width="match_parent" android:layout_height="40dp" custom:leftBackground="@drawable/blue" custom:leftText="Back" custom:leftTextColor="#ffffff" custom:rightBackground="@drawable/blue" custom:rightText="More" custom:rightTextColor="#ffffff" custom:titleTextColor="#121212" custom:titleTextSize="15sp" custom:titleText="自定义标题"> </com.cd.administrator.mytopbar.TopBar> </RelativeLayout>
MainActivity.java:
packagecom.cd.administrator.mytopbar; importandroid.support.v7.app.ActionBarActivity; importandroid.os.Bundle; importandroid.view.Menu; importandroid.view.MenuItem; importandroid.widget.Toast; publicclassMainActivityextendsActionBarActivity{ @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TopBartopBar=(TopBar)findViewById(R.id.topBar); topBar.setOnTopBarClickListener(newTopBar.topBarClickListener(){ @Override publicvoidleftClick(){ Toast.makeText(MainActivity.this,"cd--left",Toast.LENGTH_SHORT).show(); } @Override publicvoidrightClick(){ Toast.makeText(MainActivity.this,"cd--right",Toast.LENGTH_SHORT).show(); } }); } @Override publicbooleanonCreateOptionsMenu(Menumenu){ //Inflatethemenu;thisaddsitemstotheactionbarifitispresent. getMenuInflater().inflate(R.menu.menu_main,menu); returntrue; } @Override publicbooleanonOptionsItemSelected(MenuItemitem){ //Handleactionbaritemclickshere.Theactionbarwill //automaticallyhandleclicksontheHome/Upbutton,solong //asyouspecifyaparentactivityinAndroidManifest.xml. intid=item.getItemId(); //noinspectionSimplifiableIfStatement if(id==R.id.action_settings){ returntrue; } returnsuper.onOptionsItemSelected(item); } }
希望本文所述对大家的Android程序设计有所帮助。