zoukankan      html  css  js  c++  java
  • Template模式在Android中的使用

    template模式主要是将不变化的方法放在父类中,再声明一个抽象方法,子类通过实现该抽象方法,达到封装变化的作用.

    其实android也大量的使用template模式,比如view:

    下面用代码示例:

    public class TemplateActivity extends Activity implements OnClickListener ,OnFocusChangeListener{
    public static final String TITLE = "title";

    @Override
    public void setTitle(int titleId) {
    super.setTitle(titleId);
    }

    private MyButton mButton;
    private MyView mView;


    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.entry);
    findComponent();
    setOnClickListener();
    setOnFocusChangeListener();

    }

    private void setOnClickListener() {
    mButton.setOnClickListener(
    this);
    mView.setOnClickListener(
    this);
    }


    private void setOnFocusChangeListener() {
    mButton.setOnFocusChangeListener(
    this);
    mView.setOnFocusChangeListener(
    this);
    }

    private void findComponent() {
    mButton
    = (MyButton) this.findViewById(R.id.btn);
    mView
    =(MyView) this.findViewById(R.id.view);

    }

    @Override
    public void onClick(View v) {
    int id = v.getId();
    switch (id) {
    case R.id.btn:
    DebugLog.log(
    "btn onclick");
    break;
    case R.id.view:
    DebugLog.log(
    "view onclick");
    break;
    default:
    break;
    }

    }

    @Override
    public void onFocusChange(View v, boolean hasFocus) {
    int id = v.getId();
    switch (id) {
    case R.id.btn:
    DebugLog.log(
    "btn onFocusChange");
    break;
    case R.id.view:
    DebugLog.log(
    "view onFocusChange");
    break;
    default:
    break;
    }

    }

    }
    public class DebugLog {
    public final static boolean DEBUG = true;

    public static void log(String message) {
    if (DEBUG) {
    String fullClassName
    = Thread.currentThread().getStackTrace()[3].getClassName();
    String className
    = fullClassName.substring(fullClassName.lastIndexOf(".") + 1);
    String methodName
    = Thread.currentThread().getStackTrace()[3].getMethodName();
    int lineNumber = Thread.currentThread().getStackTrace()[3].getLineNumber();

    Log.d(className
    + "." + methodName + "():" + lineNumber, message);
    }
    }


    public static void printThreadId(String message) {
    if (DEBUG) {
    Log.d(message, String.valueOf(Thread.currentThread().getId()));
    }
    }

    public static void log(String tag, String message) {
    if (DEBUG) {
    String methodName
    = Thread.currentThread().getStackTrace()[3].getMethodName();
    int lineNumber = Thread.currentThread().getStackTrace()[3].getLineNumber();

    Log.d(tag
    + "." + methodName + "():" + lineNumber, message);
    }
    }

    public static void printTrace(String message) {
    if (DEBUG) {
    printIllegalArgumentException(
    "", message);
    }
    }

    public static String getStackTrace(Throwable throwable) {
    Writer writer
    = new StringWriter();
    PrintWriter printWriter
    = new PrintWriter(writer);
    throwable.printStackTrace(printWriter);
    return writer.toString();
    }

    public static void printIllegalArgumentException(String tag, String arg) {
    if (DEBUG) {
    final Throwable throwable = new IllegalArgumentException(arg);
    Log.w(tag, arg, throwable);
    }
    }

    }

    

    public class MyView extends View {
    
    	public MyView(Context context, AttributeSet attrs) {
    		super(context, attrs);
    		// TODO Auto-generated constructor stub
    	}
    
    	@Override
    	protected void onDraw(Canvas canvas) {
    		Paint paint = new Paint();
    		paint.setARGB(255, 255, 0, 0);
    		canvas.drawCircle(100, 100, 100, paint);
    		super.onDraw(canvas);
    	}
    
    	public MyView(Context context) {
    		super(context);
    	}
    
    }
    
    public class MyButton extends Button {
    
    	public MyButton(Context context) {
    		super(context);
    	}
    
    	@Override
    	protected void onDraw(Canvas canvas) {
    		Paint paint = new Paint();
    		paint.setARGB(255, 255, 0, 0);
    		canvas.drawCircle(100, 100, 100, paint);
    		super.onDraw(canvas);
    	}
    
    	public MyButton(Context context, AttributeSet attrs) {
    		super(context, attrs);
    	}
    
    }
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation
    ="vertical"
    android:layout_width
    ="fill_parent"
    android:layout_height
    ="fill_parent"
    >

    <com.fp.app.view.MyButton android:id="@+id/btn"
    android:layout_width
    ="fill_parent"
    android:layout_height
    ="wrap_content"
    android:text
    ="click me my button" />
    <com.fp.app.view.MyView android:id="@+id/view"
    android:layout_width
    ="fill_parent"
    android:layout_height
    ="wrap_content"
    android:text
    =" click me my view" />
    </LinearLayout>

  • 相关阅读:
    从官网下载mod_jk.so
    一台电脑上运行两个tomcat
    官网下载apache服务器并运行
    给tomcat7w.exe改名字
    运行tomcat7w.exe,提示:指定的服务未安装unable to open the service tomcat7
    一台电脑启动多个tomcat
    Spring和Hibernate结合的一个小例子
    spring和jdbc结合的一个小例子
    svn 文件后面显示时间和提交人
    svn 未提交的显示黑色的星*
  • 原文地址:https://www.cnblogs.com/budoudou/p/2100946.html
Copyright © 2011-2022 走看看