按钮点击

常用按钮点击

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方法,下面给出第二种方式的代码示例:

public class MainActivity extends AppCompatActivity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}

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





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