Android开发之响应用户界面的事件

来源:互联网 发布:艾默生dcs软件应用 编辑:程序博客网 时间:2024/05/11 23:42
Android平台使用回调机制来处理用户界面事件,每个View都有自己的处理事件的回调方法,如果事件没有被Activity的任何一个View所处理时,Android就会调用Activity的时间处理回调方法进行处理。
注意:如果在一个事件的方法体中,你认为已经完整地处理了这个事件,并不希望其他的回调方法,如Activity的回调方法再次处理,就返回true,否则返回false
有的时候,Android自带的视图组件并不能满足我们的需求,比如我们想要EditText实现这样的功能:它的内容不可以通过键盘输入,而只能通过程序来控制,Android自带的EditText是不具备这样的功能的,只要轻轻点击EditText用户就可以轻易输入内容了。所以我们必须开发自己的视图组件,以实现特定的需求,下面以上面提到的具有特殊功能的EditText为例,简单的讲解一下步骤。
首先,我们必须定义自己的EditText,继承自系统自带的EditText
public classMyEditText extends EditText {
publicMyEditText(Context context, AttributeSet attrs) {
super(context,attrs);
}

@Override
public booleanonTouchEvent(MotionEvent event) {
returntrue;//表示什么也不做
}
}
然后在布局文件中以包名加类名的方式加入自己定义的视图组件
<com.yuchao.myWidget.MyEditText 
   android:id="@+id/neveredit"
   android:layout_width="fill_parent" 
   android:layout_height="wrap_content" 
   android:text="@string/hello"
  />
这样,该EditText在处理用户事件中就会调用我们覆盖EditText中相应的方法了。
其实,Android中还为每一个View提供了一种事件监听的接口,每个接口都需要实现一个回调方法,我们只要实现这些方法,就能对事件进行处理,典型的例子是按钮的onClickListener,不再赘述!
下面代码展示向EditText中添加表情,类似QQ聊天窗口
findViewById(R.id.btn_insert ).setOnClickListener(newOnClickListener() {
    public voidonClick(View v) {
try{
Bitmap bitmap =BitmapFactory.decodeResource(getResources(),R.drawable.hh);
// 根据Bitmap对象创建ImageSpan对象
ImageSpan imageSpan = new ImageSpan(bitmap);
// 创建一个SpannableString对象,以便插入用ImageSpan对象封装的图像
SpannableString spannableString = newSpannableString("f");
// 用ImageSpan对象替换"f"占位符
spannableString.setSpan(imageSpan, 0, 1,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
// 将获得的图像追加到EditText控件的最后
EditTexteditText=(EditText)findViewById(R.id.neveredit);
editText.append(spannableString);
}catch(Exception e){}
}
});
原创粉丝点击