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程序设计有所帮助。