一、新建属性
在新建的module中的values文件夹下新建atts.xml
声明
<declare-styleable name="Topbar">
<attr name="title" format="string"/>
//此处省略10000字
</declare-styleable>
二、实现自己的View
可以继承RelativeLayout
创建构造方法
private String title;
private TextView mTvTitle;
private LayoutParams titleParams;
public Topbar(Context context,AttributeSet attrs){
super(context,attrs);
//用系统提供的API,将各种view属性设置进去
TypedArray ta = context.obtainStyledAttributes(attrs,R.styleable.Topbar);
//通过下划线连接
title = ta.getString(R.styleable.Topbar_title);
//为了避免浪费资源,要回收ta
ta.recycle();
mTvTitle = new TextView();
//将标题文字设置
mTvTitle.setText(title);
mTvTitle.setGravity(Gravity.CENTER);
titleParams = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT);
//加入一些规则,这里的TRUE为常量
titleParams.addRule(RelativeLayout.CENTER_IN_PARENT,TRUE);
addView(mTvTitle,titleParams );
}
三、使用自定义View
(一)用完整类名引用控件
例如TextView,用类名引入
<com.charon.Topbar
</com.charon.Topbar>
(二)引入相应的命名空间
xmlns:topbar="http://schemas.android.com/apk/res-auto"
即可用
topbar:title="这是一个标题"
四、实现view的点击事件
(一)定义接口
public interface topbarClickListener{
public void leftClick();
public void rightClick();
}
(二)暴露方法
public void setOnTopbarClickListener(topbarClickListener listener){
if(listener == null)
this.listener = listener;
}
(三)设置点击事件
// 设置相应的点击事件
leftButton.setOnClickListener(new OnClickListener()){
@Override
public void onClick(View v){
listener.leftClick();
}
}
(四)调用者的引用
//在Activity中,设置相应的方法
topbar.setOnTopbarClickListener(new Topbar.topbarClickListener()){
@Override
public void leftClick(){
//dosomething
}
@Override
public void rightClick(){
//dosomething
}
}
五、更多
在Topbar中可以设置很多自定义属性
比如是否可见
public void setLeftIsVisible(boolean flag){
if(flag){
leftButton.setVisibility(View.VISIBLE);
} else {
leftButton.setVisibility(View.GONE);
}
}
则可以直接调用这属性。
topbar.setLeftIsVisible(false);