android 自定义控件的几种模式

业务场景:

1、项目中有很多模块界面长的相同;为了减少工作量,我们可能需要自定义View;
2、有些模块使用的控件通用如分享弹出控件、Dialog弹出控件
3、业务复杂的模块(对扩展性要求较高):播放器、表情输入控件、图片浏览器

方案:

1、最简单的就是继承FrameLayout、RelativeLayout、LinearLayout、View来扩展功能暴露接口
2、继承Dialog、popwindow做功能
3、直接写个帮助类

如果控件的业务不复杂,对于1、3的方式总觉得有点麻烦;一个帮助类不同的方法界面实现的代码还是差不多的,只是的数据不同;如果要扩展还需要复制一份代码来改改数据

BaseViewHoldModle模板

public abstract class BaseViewHoldModle { 
   protected Date mDate; 
   protected View rootView;  
  //生成View  
  public abstract View createView(Context context);  
  //设置数据  
  public void setViewData(Date data){
      this.mDate = data;  
  }
}

实例代码

public class SystemTipHolder extends BaseViewHoldModle {
    @Override
    public View createView(Context context) {
        rootView = View.inflate(context, R.layout.row_message_systemtip, null);//返回系统错误视图
        return rootView;
    }

    @Override
    public void setViewData(String data) {
        super.setViewData(data);
        TextView mTextView = (TextView)rootView.findViewById(R.id.txt_apply_cancel);
        mTextView.setText(data);
    }
}

SystemTipHolder mSystemTipHolder = new SystemTipHolder();
messageView = mSystemTipHolder.createView(context);
mSystemTipHolder.setViewData(context.getString(R.string.cancle_order_apply));
addView(messageView);

你可能感兴趣的:(android 自定义控件的几种模式)