Android开发笔记(四十三)点击事件

按钮点击

常用按钮点击

1、单击事件,主要用于Button和ImageButton控件,布局视图与TextView、ImageView控件用的也比较多。相关类名与方法说明如下:
监听器类名 : View.OnClickListener
设置监听器的方法 : setOnClickListener
监听器需要重写的点击方法 : onClick


2、长按事件,较少使用,一般长按要么弹出提示对话框,要么弹出上下文菜单(上下文菜单只需注册就好,无需额外处理长按事件)。相关类名与方法说明如下:
监听器类名: View.OnLongClickListener
设置监听器的方法 : setOnLongClickListener
监听器需要重写的点击方法 : onLongClick


3、组合按钮点击事件,一般用于CheckBox控件。相关类名与方法说明如下:
监听器类名 : CompoundButton.OnCheckedChangeListener
设置监听器的方法 : setOnCheckedChangeListener
监听器需要重写的点击方法 : onCheckedChanged


4、单选按钮点击事件,只能用于RadioGroup视图。相关类名与方法说明如下:
监听器类名 : RadioGroup.OnCheckedChangeListener
设置监听器的方法 : setOnCheckedChangeListener
监听器需要重写的点击方法 : onCheckedChanged


常用按钮点击事件的具体实现代码可参考《 Android开发笔记(三十七)按钮类控件》。


普通点击的其他表达方式

onClick用于响应从按下到松开间隔时间较短的点击事件,onLongClick用于响应从按下到松开间隔时间较长的点击事件,间隔时间阈值大约在1-2秒之间。但不管是onClick还是onLongClick都要在松开后,才会调用相应的单击或者长按函数,而且不知道按下的是什么键,所以有时不能满足比较精细的事件要求。为此,View类还提供了几个与点击有关的监听器,用来处理一些特殊场景。举例如下:


1、触摸事件,从用户按下屏幕就开始响应,直到用户松开才终止响应,期间可处理按下、移动、松开等动作。相关类名与方法说明如下:
监听器类名 : OnTouchListener
设置监听器的方法 : setOnTouchListener
监听器需要重写的点击方法 : onTouch


2、键盘事件,该事件比触摸事件更进一步,不但在触摸时全程响应,还能获知当前按下的是哪个键。相关类名与方法说明如下:
监听器类名 : OnKeyListener
设置监听器的方法 : setOnKeyListener
监听器需要重写的点击方法 : onKey

键盘事件的具体实现代码可参考《 Android开发笔记(三十六)展示类控件》。


3、焦点变化事件,主要用于EditText控件。比如屏幕上有多个EditText输入框,当用户点击某个输入框,则该输入框获得焦点;然后用户再点击另一个输入框,则原输入框失去焦点,当前输入框获得焦点;所有获得焦点与失去焦点的控件,都有条件响应焦点变化事件。相关类名与方法说明如下:
监听器类名 : OnFocusChangeListener
设置监听器的方法 : setOnFocusChangeListener
监听器需要重写的点击方法 : onFocusChange


对话框按钮点击

对话框的点击事件其实就是按钮点击,只是对话框上有多个按钮,所以需要分别注册监听器,分别响应点击事件。相关类名与方法说明如下:
监听器类名 : DialogInterface.OnClickListener
设置监听器的方法包含了如下三个按钮 : 
setPositiveButton : 设置肯定按钮的监听器,一般是确认
setNegativeButton : 设置否定按钮的监听器,一般是取消
setNeutralButton : 设置中性按钮的监听器,这个很少用
监听器需要重写的点击方法 : onClick


对话框按钮点击事件的具体实现代码可参考《 Android开发笔记(二十三)文件对话框FileDialog》。



列表点击

列表项点击

1、单项选择事件,一般用于Spinner控件,在某个列表元素被选中时触发。相关类名与方法说明如下:
监听器类名 : AdapterView.OnItemSelectedListener
设置监听器的方法 : setOnItemSelectedListener
监听器需要重写的点击方法 : 
onItemSelected : 列表项被选中时调用
onNothingSelected : 没有选择任何项时调用,该方法一般为空


2、单项点击事件,一般用于ListView控件和GridView控件,在某个元素被点击时触发。相关类名与方法说明如下:
监听器类名 : AdapterView.OnItemClickListener
设置监听器的方法 : setOnItemClickListener
监听器需要重写的点击方法 : onItemClick


2、单项长按事件,一般用于ListView控件和GridView控件,在某个元素被长按时触发。相关类名与方法说明如下:
监听器类名 : AdapterView.OnItemLongClickListener
设置监听器的方法 : setOnItemLongClickListener
监听器需要重写的点击方法 : onItemLongClick


列表项点击事件的具体实现代码可参考《 Android开发笔记(三十八)列表类视图》。


导航项点击

1、下拉导航项的点击事件,导航模式需设置为ActionBar.NAVIGATION_MODE_LIST,展现形式上很像Spinner,用于响应具体下拉项的选中事件。相关类名与方法说明如下:
监听器类名 : ActionBar.OnNavigationListener
设置监听器的方法 : setListNavigationCallbacks
监听器需要重写的点击方法 : onNavigationItemSelected


下拉导航项的点击事件的具体实现代码可参考《 Android开发笔记(二十)顶部导航栏ActionBar》。


2、标签导航项的点击事件,导航模式需设置为ActionBar.NAVIGATION_MODE_TABS,用于响应具体标签页的选中事件。相关类名与方法说明如下:
监听器类名 : ActionBar.TabListener
设置监听器的方法 : setTabListener
监听器需要重写的点击方法 : 
onTabSelected : 在标签页选中时调用
onTabUnselected : 在标签页取消选中时调用,该方法一般为空
onTabReselected : 在标签页在选中状态下再次选中时调用,该方法一般为空


标签导航项的点击事件的具体实现代码可参考《 Android开发笔记(四十二)Broadcast的生命周期》。



菜单项点击

菜单的点击事件适用于选项菜单和上下文菜单的单项点击,菜单无需注册监听器即可响应点击事件,相关的点击处理方法说明如下:
onMenuItemSelected : 在菜单项选择时调用,其内部做分支判断,如果是选项菜单,则调用onOptionsItemSelected;如果是上下文菜单,则调用onContextItemSelected。
onOptionsItemSelected : 在选项菜单的菜单项选中时调用。
onContextItemSelected : 在上下文菜单的菜单项选中时调用。


菜单项点击事件的具体实现代码可参考《 Android开发笔记(六十五)多样的菜单》。



物理按键点击

iphone手机控制屏幕的按键只有一个Home键,相比之下,android手机除了位于中间的Home主页键,还有左边的菜单键,右边的返回键。按下菜单键,屏幕上弹出该页的Menu菜单(如果有定义的话)。按下主页键,屏幕回到桌面;长按主页键,屏幕显示进程列表。按下返回键,屏幕返回当前APP的上一页面;如果当前APP已处于栈顶的主页,则屏幕退出APP页面并返回到桌面。


对于菜单键和主页键,基本上是该干啥就干啥,我们不需要去拦截。但对于返回键,在某些情况下需要拦截处理。比如说,用户在APP首页按了返回键,如果APP就直接退出,这个用户体验不好。一方面可能是用户不小心按了返回键,并不是就想退出APP;另一方面APP也需要缓冲,不管是想留住用户还是想多做些事;总之,此时当用户按下返回键时,APP得适当做出提示。


常见的提示方式不外乎两种:
1、APP弹出一个确认对话框,让用户选择是否退出APP,点击“是”按钮则退出,点击“否”按钮则取消;
2、APP弹出Toast提示“再按一次返回键退出”,如果用户接着又按了一次返回键,那么APP再退出;


两种方式的处理流程大同小异,都是重写返回键的onBackPressed方法,下面给出第二种方式的代码示例:
import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;


public class MainActivity extends Activity {


	private boolean exit = false;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}


	@Override
	public void onBackPressed() {
		if (this.exit) {
			finish();
			return;
		}
		this.exit = true;
		Toast.makeText(this, "再按一次返回键退出!", Toast.LENGTH_SHORT).show();


		super.onBackPressed();
	}
}





点此查看Android开发笔记的完整目录

你可能感兴趣的:(android,contextMenu,选项菜单,上下文菜单,optionsMenu)