• 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>

  • 相关阅读:
    JVM1
    JVM
    安卓权威编程指南 -笔记(19章 使用SoundPool播放音频)
    安卓权威编程指南 -笔记(18章 处理assets)
    安卓权威编程指南 挑战练习 16章
    安卓权威编程指南 -挑战练习 15章。
    安卓权威编程指南 挑战练习 13.8 用于RecyclerView的空视图
    安卓权威编程指南 挑战练习13.7-优化字符串资源显示
    关于List比较好玩的操作
    安卓权威编程指南 挑战练习13.6 14.8
  • 原文地址:https://www.cnblogs.com/budoudou/p/2100946.html
Copyright © 2020-2023  润新知