修改现有的View

   

工具箱包含许多普通需求的UI,但这些控件不一定通用。通过定制这些基本的View,你可以避免重新实现现有的逻辑,而做到为应用程序裁剪它需要的UI和功能。

 

基于现有的控件来创建新的widget,需要创建一个新类来扩展它。如下面的代码片段所示,对TextView进行了扩展:

 

import android.content.Context;

import android.util.AttributeSet;

import android.widget.TextView;

 

public class MyTextView extends TextView {

 

public MyTextView (Context context, AttributeSet attrs, int defStyle)

{

super(context, attrs, defStyle);

}

 

public MyTextView (Context context) {

super(context);

}

 

public MyTextView (Context context, AttributeSet attrs) {

super(context, attrs);

}

}

 

重写新的View的外观或行为,重写和扩展与想要改变的行为有关的事件处理器。

 

在接下来的代码片段,onDraw方法被重写来修改View的外观,onKeyDown处理器被重写来允许特定的按键响应:

 

public class MyTextView extends TextView {

 

public MyTextView (Context context, AttributeSet ats, int defStyle) {

super(context, ats, defStyle);

}

 

public MyTextView (Context context) {

super(context);

}

 

public MyTextView (Context context, AttributeSet attrs) {

super(context, attrs);

}

 

@Override

public void onDraw(Canvas canvas) {

[ ... 在文字之下画布之上画画... ]

// 使用TextView基类来渲染文字。

super.onDraw(canvas);

[ ... 在文字之上画布之上画画... ]

}

 

@Override

public boolean onKeyDown(int keyCode, KeyEvent keyEvent) {

[ ... 执行一些特殊的处理 ... ]

[ ... 基于特定的按键按下 ... ]

// 使用现有的功能,通过基类的实现来响应按键按下事件。

return super.onKeyDown(keyCode, keyEvent);

}

}

 

View中的UI事件处理器将在本章稍后部分详细介绍。

posted on 2009-07-22 10:09  xirihanlin  阅读(943)  评论(0编辑  收藏  举报