实例介绍
【实例简介】
【实例截图】
【核心代码】
package scratchcard.cbt.com.learnuserdefinedview; import android.content.Context; import android.content.res.TypedArray; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.RelativeLayout; import android.widget.TextView; /** * Created by caobotao on 15/12/9. */ public class TopBar extends RelativeLayout{ /* * 声明控件 */ private Button leftBtn;//左按钮 private TextView textView;//中间文本框 private Button rightBtn;//右按钮 /* * 声明三个控件的属性 */ //声明左按钮的属性 private String leftText;//按钮文本 private Drawable leftBackground;//按钮背景 private int leftTextColor;//按钮文本颜色 //声明中间文本框的属性 private String tbTitle;//文本框文本 private float titleTextSize;//文本框字体大小 private int titleTextColor;//文本框字体颜色 //声明右按钮的属性 private String rightText;//按钮文本 private Drawable rightBackground;//按钮背景 private int rightTextColor;//按钮文本颜色 /* * 声明三个控件的布局属性 */ private LayoutParams leftBtnLayoutParams; private LayoutParams textViewLayoutParams; private LayoutParams rightBtnLayoutParams; //声明左右按钮点击监听 private TopBarBtnsOnClickListener listener; //创建一个监听左右按钮点击的接口 public interface TopBarBtnsOnClickListener{ public void leftBtnOnClick();//左按钮被点击的事件 public void rightBtnOnClick();//右按钮被点击的事件 } //向外提供一个设置监听的方法 public void setOnTopBarBtnsClick(TopBarBtnsOnClickListener listener){ this.listener = listener; } //重写构造方法 public TopBar(Context context, AttributeSet attrs) { super(context, attrs); /* * 用TypedArray可以获取用户在xml中声明的此控件的所有属性,以键值对存储, * K:资源文件(例 R.styleable.topBar_leftText) * V:属性值 */ TypedArray ta = context.obtainStyledAttributes(attrs,R.styleable.topBar); //为左按钮的属性赋值 leftText = ta.getString(R.styleable.topBar_leftText); leftBackground = ta.getDrawable(R.styleable.topBar_leftBackground); leftTextColor = ta.getInt(R.styleable.topBar_leftTextColor,0); //为中间的文本框的属性赋值 tbTitle = ta.getString(R.styleable.topBar_tbTitle); titleTextSize = ta.getDimension(R.styleable.topBar_titleTextSize,0); titleTextColor = ta.getInt(R.styleable.topBar_titleTextColor,0); //为右按钮的属性赋值 rightText = ta.getString(R.styleable.topBar_rightText); rightBackground = ta.getDrawable(R.styleable.topBar_rightBackground); rightTextColor = ta.getInt(R.styleable.topBar_rightTextColor,0); //使用完TypedArray之后需要调用其recycle()方法,以便重用 ta.recycle(); //实例化三个控件 leftBtn = new Button(context); textView = new TextView(context); rightBtn = new Button(context); //设置左按钮的属性 leftBtn.setText(leftText); leftBtn.setBackground(leftBackground); leftBtn.setTextColor(leftTextColor); //设置文本框的属性 textView.setText(tbTitle); textView.setTextSize(titleTextSize); textView.setTextColor(titleTextColor); textView.setGravity(Gravity.CENTER); //设置右按钮的属性 rightBtn.setText(rightText); rightBtn.setBackground(rightBackground); rightBtn.setTextColor(rightTextColor); //设置此自定义控件的背景颜色 setBackgroundColor(0xFFF59563); //实例化左按钮的布局属性 leftBtnLayoutParams = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); //设置左按钮靠左显示 leftBtnLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT,TRUE); //将左按钮添加到本自定义控件中 addView(leftBtn,leftBtnLayoutParams); //同上 rightBtnLayoutParams = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); rightBtnLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT,TRUE); addView(rightBtn,rightBtnLayoutParams); //同上 textViewLayoutParams = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT); textViewLayoutParams.addRule(RelativeLayout.CENTER_IN_PARENT,TRUE); addView(textView,textViewLayoutParams); //回调左按钮的监听事件 leftBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { listener.leftBtnOnClick(); } }); //回调右按钮的监听事件 rightBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { listener.rightBtnOnClick(); } }); } //当然,我们还可以添加其他控制此控件的方法,如设置左按钮是否可见等等,大家可根据自己的需求进行扩展 public void setLeftBtnVisible(boolean isVisible){ leftBtn.setVisibility(isVisible ? VISIBLE : INVISIBLE); } }
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论