05
2017
10

Android自定义View与添加点击事件

一、新建属性

在新建的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);

参考:Android 创建UI模板和自定义控件

上一篇:从github上下载的项目无法在android studio中打开的解决办法 下一篇:Android 小问题汇总