地址
http://blog.csdn.net/xiangyong_1521/article/details/78489254
目录
- 常见按钮点击
- 点击的其他方式
- 对话框按钮点击
- 列表点击
- 物理键点击
- 附
1. 常见按钮点击
a、单击事件,主要用于Button和ImageButton控件,布局视图与TextView、ImageView控件用的也比较多。相关类名与方法说明如下:
监听器类名 : View.OnClickListener
设置监听器的方法 : setOnClickListener
监听器需要重写的点击方法 : onClick
findViewById(R.id.button).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { } });
b、长按事件,较少使用,一般长按要么弹出提示对话框,要么弹出上下文菜单(上下文菜单只需注册就好,无需额外处理长按事件)。相关类名与方法说明如下:
监听器类名: View.OnLongClickListener
设置监听器的方法 : setOnLongClickListener
监听器需要重写的点击方法 : onLongClick
findViewById(R.id.button).setOnLongClickListener(new OnLongClickListener() { @Override public boolean onLongClick(View v) { return false; } });
c、组合按钮点击事件,一般用于CheckBox控件。相关类名与方法说明如下:
监听器类名 : CompoundButton.OnCheckedChangeListener
设置监听器的方法 : setOnCheckedChangeListener
监听器需要重写的点击方法 : onCheckedChanged
findViewById(R.id.button).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { } });
d、单选按钮点击事件,只能用于RadioGroup视图。相关类名与方法说明如下:
监听器类名 : RadioGroup.OnCheckedChangeListener
设置监听器的方法 : setOnCheckedChangeListener
监听器需要重写的点击方法 : onCheckedChanged
findViewById(R.id.button).setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup arg0, int checkedId) { switch (checkedId) { } } };
2. 点击的其他方式
onClick用于响应从按下到松开间隔时间较短的点击事件,onLongClick用于响应从按下到松开间隔时间较长的点击事件,间隔时间阈值大约在1-2秒之间。但不管是onClick还是onLongClick都要在松开后,才会调用相应的单击或者长按函数,而且不知道按下的是什么键,所以有时不能满足比较精细的事件要求。为此,View类还提供了几个与点击有关的监听器,用来处理一些特殊场景。举例如下:
a、触摸事件,从用户按下屏幕就开始响应,直到用户松开才终止响应,期间可处理按下、移动、松开等动作。相关类名与方法说明如下:
监听器类名 : OnTouchListener
设置监听器的方法 : setOnTouchListener
监听器需要重写的点击方法 : onTouch
findViewById(R.id.button).setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN://按下 break; case MotionEvent.ACTION_UP://抬起 break; case MotionEvent.ACTION_MOVE://表示按下后移动了手指 break; } return false; } });
b、键盘事件,该事件比触摸事件更进一步,不但在触摸时全程响应,还能获知当前按下的是哪个键。相关类名与方法说明如下:
监听器类名 : OnKeyListener
设置监听器的方法 : setOnKeyListener
监听器需要重写的点击方法 : onKey
findViewById(R.id.button).setOnKeyListener(new OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { switch (event.getAction()) { case KeyEvent.ACTION_UP: //键盘松开 Toast.makeText(SQLiteActivity.this, ""+keyCode, 0).show(); break; case KeyEvent.ACTION_DOWN: //键盘按下 break; } return false; } });
c、焦点变化事件,主要用于EditText控件。比如屏幕上有多个EditText输入框,当用户点击某个输入框,则该输入框获得焦点;然后用户再点击另一个输入框,则原输入框失去焦点,当前输入框获得焦点;所有获得焦点与失去焦点的控件,都有条件响应焦点变化事件。相关类名与方法说明如下:
监听器类名 : OnFocusChangeListener
设置监听器的方法 : setOnFocusChangeListener
监听器需要重写的点击方法 : onFocusChange
findViewById(R.id.button1).setOnFocusChangeListener(new OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { Toast.makeText(SQLiteActivity.this, "1:"+hasFocus, 0).show(); } }); findViewById(R.id.button2).setOnFocusChangeListener(new OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { Toast.makeText(SQLiteActivity.this, "2:"+hasFocus, 0).show(); } });
3. 对话框按钮点击
对话框的点击事件其实就是按钮点击,只是对话框上有多个按钮,所以需要分别注册监听器,分别响应点击事件。相关类名与方法说明如下:
监听器类名 : DialogInterface.OnClickListener设置监听器的方法包含了如下三个按钮 :
setPositiveButton : 设置肯定按钮的监听器,一般是确认
setNegativeButton : 设置否定按钮的监听器,一般是取消
setNeutralButton : 设置中性按钮的监听器,这个很少用
监听器需要重写的点击方法 : onClick
protected void dialog() { AlertDialog.Builder builder = new Builder(getActivity()); builder.setMessage(getResources().getString(R.string.factory_reset_dlg_text));//样式 builder.setPositiveButton(getResources().getString(R.string.other_ok), new DialogInterface.OnClickListener() {//确定 @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); resetFactory(); } }); builder.setNegativeButton(getResources().getString(R.string.other_cancel), new DialogInterface.OnClickListener() {//取消 @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); builder.create().show(); }
4. 列表点击
a、单项选择事件,一般用于Spinner控件,在某个列表元素被选中时触发。相关类名与方法说明如下:
监听器类名 : AdapterView.OnItemSelectedListener
设置监听器的方法 : setOnItemSelectedListener
监听器需要重写的点击方法 :
onItemSelected : 列表项被选中时调用
onNothingSelected : 没有选择任何项时调用,该方法一般为空
mySpinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() {//选择item的选择点击监听事件 public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub // 将所选mySpinner 的值带入myTextView 中 myTextView.setText("您选择的是:" + adapter.getItem(arg2));//文本说明 } public void onNothingSelected(AdapterView<?> arg0) { // TODO Auto-generated method stub myTextView.setText("Nothing"); } });
b、单项点击事件,一般用于ListView控件和GridView控件,在某个元素被点击时触发。相关类名与方法说明如下:
监听器类名 : AdapterView.OnItemClickListener
设置监听器的方法 : setOnItemClickListener
监听器需要重写的点击方法 : onItemClick
/** * 响应ListView中item的点击事件 */ @Override public void onItemClick(AdapterView<?> arg0, View v, int position, long id) { Toast.makeText(this, "listview的item被点击了!,点击的位置是-->" + position, Toast.LENGTH_SHORT).show(); }
c、单项长按事件,一般用于ListView控件和GridView控件,在某个元素被长按时触发。相关类名与方法说明如下:
监听器类名 : AdapterView.OnItemLongClickListener
设置监听器的方法 : setOnItemLongClickListener
监听器需要重写的点击方法 : onItemLongClick
/** * 响应ListView中item的点击事件 */ @Override public void onItemLongClick(AdapterView<?> arg0, View v, int position, long id) { Toast.makeText(this, "listview的item被点击了!,点击的位置是-->" + position, Toast.LENGTH_SHORT).show(); }
4.2 导航项点击a、下拉导航项的点击事件,导航模式需设置为ActionBar.NAVIGATIONMODELIST,展现形式上很像Spinner,用于响应具体下拉项的选中事件。相关类名与方法说明如下:
监听器类名 : ActionBar.OnNavigationListener
设置监听器的方法 : setListNavigationCallbacks
监听器需要重写的点击方法 : onNavigationItemSelected
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(MenuItem item) { //在这里处理item的点击事件 return true; } });
b、标签导航项的点击事件,导航模式需设置为ActionBar.NAVIGATIONMODETABS,用于响应具体标签页的选中事件。相关类名与方法说明如下:
监听器类名 : ActionBar.TabListener
设置监听器的方法 : setTabListener
监听器需要重写的点击方法 :
onTabSelected : 在标签页选中时调用
onTabUnselected : 在标签页取消选中时调用,该方法一般为空onTabReselected : 在标签页在选中状态下再次选中时调用,该方法一般为空
public class TabListener<T extends Fragment> implements ActionBar.TabListener { private Fragment mFragment; private final Activity mActivity; private final String mTag; private final Class<T> mClass; public TabListener(Activity activity, String tag, Class<T> clz) { mActivity = activity; mTag = tag; mClass = clz; } public void onTabSelected(Tab tab, FragmentTransaction ft) { if (mFragment == null) { mFragment = Fragment.instantiate(mActivity, mClass.getName()); ft.add(android.R.id.content, mFragment, mTag); } else { ft.attach(mFragment); } } public void onTabUnselected(Tab tab, FragmentTransaction ft) { if (mFragment != null) { ft.detach(mFragment); } } public void onTabReselected(Tab tab, FragmentTransaction ft) { } }
4.3 菜单项点击菜单的点击事件适用于选项菜单和上下文菜单的单项点击,菜单无需注册监听器即可响应点击事件,相关的点击处理方法说明如下:onMenuItemSelected : 在菜单项选择时调用,其内部做分支判断,如果是选项菜单,则调用onOptionsItemSelected;
如果是上下文菜单,则调用onContextItemSelected。onOptionsItemSelected : 在选项菜单的菜单项选中时调用。onContextItemSelected : 在上下文菜单的菜单项选中时调用。
@Override public boolean onMenuItemSelected(int featureId, MenuItem item) { return false; }
5. 物理按键点击
android手机除了位于中间的Home主页键,还有左边的菜单键,右边的返回键。按下菜单键,屏幕上弹出该页的Menu菜单(如果有定义的话)。按下主页键,屏幕回到桌面;长按主页键,屏幕显示进程列表。按下返回键,屏幕返回当前APP的上一页面;如果当前APP已处于栈顶的主页,则屏幕退出APP页面并返回到桌面。
退出常见的提示方式不外乎两种:
1、APP弹出一个确认对话框,让用户选择是否退出APP,点击“是”按钮则退出,点击“否”按钮则取消;
2、APP弹出Toast提示“再按一次返回键退出”,如果用户三秒之内接着又按了一次返回键,那么APP再退出;
private long mTickForShow; @Override public void onBackPressed() { if (SystemClock.uptimeMillis()-mTickForShow<3000) { finish(); }else{ Toast.makeText(getApplication(), ""+getString(R.string.goout).toString(), 0).show(); } mTickForShow=SystemClock.uptimeMillis(); }
附
结束