Android监听事件学习笔记
很抱歉本文的图片没了,如果希望获取代码的和pdf(有图片)学习的可以下载附上的pdf链接:
1.在Android中,View只是提供一个视觉的交互界面,如果要让View响应用户的交互行为,就需要为View添加事件处理,如前面案例或实验中使用较多的View.OnClickListener事件侦听器,一般来说事件侦听器都是包含回调方法的抽象接口,例如OnClickListener对应的回调方法为OnClick()。实际上,除了OnClickListener事件外,Android中的事件侦听器还有(部分罗列):
侦听器 回调方法 描述
OnLongClickListener() OnLongClick() 对长点击事件进行监听
OnFocusChangeListener() OnFocusChange() 对聚焦事件进行监听
OnKeyListener() OnKey() 对按键输入进监听
OnTouchListener() OnTouch() 对某个控件的触摸检测
OnMenuItemClickListener() OnMenuItemClick() 选项菜单点击检测
OnCreateContextMenuListener() OnCreateContextMenu() 是用来处理上下文菜单显示事件的监听接口
请查阅相关资料或书籍,比较系统地学习一下Android中的事件处理,找出以上这些侦听器对应的使用场景,并补充其他相关的事件处理,如果可能的话请编程对其中的部分事件进行实际的验证。
我通过自己编写的一个案例来对上面六个Android事件监听器进行说明:
- OnLongClickListener()
这是一个用于长点击事件监听的监听器,平时我们只是通过点击然后获得相应,但是如果想要获得长时间点击时候的响应就需要使用这个监听器,具体使用可以用在长点击弹出菜单:
- 代码:
//给这个按钮设置长按监听
longclickbutton = (Button) findViewById(R.id.button);
longclickbutton.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
//输出消息
Toast.makeText(MainActivity.this, "我是长按button", Toast.LENGTH_SHORT).show();
return true;
}
});
- 当长时间点击时就可以获得相应,这里输出一个弹出框。
- OnFocusChangeListener()
这是用于焦点监听的监听器,比如输入框获得点击就会被监听到,这样当用户点击输入框时可以进行相对于的响应,比如显示输入不符合标准,就可以在输入时候给用户提示:
- 代码:
//聚焦
foucus1 = (EditText) findViewById(R.id.editText);
foucus1.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus==true){
foucus1.setHint("现在聚焦于此");
}else{
foucus1.setHint("现在聚焦于他处");
}
}
});
foucus2 = (EditText) findViewById(R.id.editText2);
foucus2.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus==true){
foucus2.setHint("现在聚焦于此");
}else{
foucus2.setHint("现在聚焦于他处");
}
}
});
- 这里用来两个输入框,当其中一个获取焦点显示“现在聚焦于此”,另外一个就无法获取焦点输出:“现在聚焦于他处”:
- OnKeyListener()
这是一个用于获得键盘监听事件的监听器,当用户键盘输入时候就会立刻获得相应,这里用一个计算BMI的例子来举例,我对体重进行监听,当体重输入时就会显示出当前计算的BMI的值:
- 代码:
//按键监听
key1 = (EditText) findViewById(R.id.editText4);
key2 = (EditText) findViewById(R.id.editText5);
textview = (TextView) findViewById(R.id.textView2);
key2.setOnKeyListener(new EditText.OnKeyListener(){
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
double x = Double.valueOf(key1.getText().toString());
double y = Double.valueOf(key2.getText().toString());
double z;
try{
z= y/x;
}catch (ArithmeticException exc){
Log.d(MainActivity.ACTIVITY_TAG,"计算错误");
}
textview.setText("BMI:"+y/x);
return false;
}
});
- 显示效果:
- OnTouchListener()
触摸检测用于检测一些按下,松开,拖动等事件,使用也比较广泛,这里用一个按下松开事件进行说明:
- 代码:
//触摸监听
TouchButton = (Button) findViewById(R.id.button4);
TouchButton.setOnTouchListener(new View.OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
TouchButton.setText("按下");
break;
case MotionEvent.ACTION_UP:
TouchButton.setText("松开");
break;
}
return true;
}
});
- 显示结果,当按下按钮显示按下,当松开按钮显示松开:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dWP1fMiQ-1585498335655)(D:\桌面\image-20200329234132502.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b4bWg4OS-1585498335659)(D:\桌面\image-20200329234132502.png)]
- OnMenuItemClickListener()
选项菜单监听器,也就是在右上角的菜单,可以对选项进行监听:
- 代码:
//选项菜单点击监听
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
getMenuInflater().inflate(R.menu.main_menu,menu);
menu.findItem(R.id.menu_login).setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
Toast.makeText(MainActivity.this, "登录按钮按下", Toast.LENGTH_SHORT).show();
return true;
}
});
menu.findItem(R.id.menu_setting).setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
Toast.makeText(MainActivity.this, "设置按钮按下", Toast.LENGTH_SHORT).show();
return true;
}
});
menu.findItem(R.id.menu_exit).setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
Toast.makeText(MainActivity.this, "退出按钮按下", Toast.LENGTH_SHORT).show();
return true;
}
});
return true;
}
显示效果:
点击登录:
- OnCreateContextMenuListener()
是用来处理上下文菜单显示事件的监听接口:
- 代码:
//长按显示上下文菜单按钮
ContextMenuButton = (Button) findViewById(R.id.button2);
ContextMenuButton.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
registerForContextMenu(v);
openContextMenu(v);
return true;
}
});
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
getMenuInflater().inflate(R.menu.main_menu,menu);
menu.findItem(R.id.menu_login).setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
Toast.makeText(MainActivity.this, "登录按钮按下", Toast.LENGTH_SHORT).show();
return true;
}
});
menu.findItem(R.id.menu_setting).setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
Toast.makeText(MainActivity.this, "设置按钮按下", Toast.LENGTH_SHORT).show();
return true;
}
});
menu.findItem(R.id.menu_exit).setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
Toast.makeText(MainActivity.this, "退出按钮按下", Toast.LENGTH_SHORT).show();
return true;
}
});
}
- 显示结果
除了这些监听器之外还有很多其他的监听器,安坐这些监听器,有了这些监听器才可以让安卓更加方便使用。
<img src="D:\桌面\image-20200329234753038.png" alt="image-20200329234753038" style="zoom:50%;"/>
除了这些监听器之外还有很多其他的监听器,安坐这些监听器,有了这些监听器才可以让安卓更加方便使用。