笔记31 | 归纳总结Android的点击事件

来源:互联网 发布:淘宝813大促 编辑:程序博客网 时间:2024/06/13 22:35

地址

http://blog.csdn.net/xiangyong_1521/article/details/78489254

目录

  • 常见按钮点击

  • 点击的其他方式

  • 对话框按钮点击

  • 列表点击

  • 物理键点击




1. 常见按钮点击

a、单击事件,主要用于ButtonImageButton控件,布局视图与TextViewImageView控件用的也比较多。相关类名与方法说明如下:监听器类名 : View.OnClickListener

设置监听器的方法 : setOnClickListener

监听器需要重写的点击方法 : onClick

  1. findViewById(R.id.button).setOnClickListener(new OnClickListener() {            

  2.            @Override

  3.            public void onClick(View v) {              

  4.            }

  5.        });

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

设置监听器的方法 : setOnLongClickListener

监听器需要重写的点击方法 : onLongClick

  1. findViewById(R.id.button).setOnLongClickListener(new OnLongClickListener() {

  2.            @Override

  3.            public boolean onLongClick(View v) {

  4.                return false;

  5.            }

  6.        });

c、组合按钮点击事件,一般用于CheckBox控件。相关类名与方法说明如下:监听器类名 :CompoundButton.OnCheckedChangeListener

设置监听器的方法 : setOnCheckedChangeListener

监听器需要重写的点击方法 : onCheckedChanged

  1. findViewById(R.id.button).setOnClickListener(new OnClickListener() {

  2.            @Override

  3.            public void onClick(View v) {

  4.            }

  5.        });

d、单选按钮点击事件,只能用于RadioGroup视图。相关类名与方法说明如下:监听器类名 :RadioGroup.OnCheckedChangeListener

设置监听器的方法 : setOnCheckedChangeListener

监听器需要重写的点击方法 : onCheckedChanged

  1. findViewById(R.id.button).setOnCheckedChangeListener(new OnCheckedChangeListener() {

  2.        @Override

  3.        public void onCheckedChanged(RadioGroup arg0, int checkedId) {

  4.            switch (checkedId) {            

  5.            }

  6.        }

  7.    };


2. 点击的其他方式

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

a、触摸事件,从用户按下屏幕就开始响应,直到用户松开才终止响应,期间可处理按下、移动、松开等动作。相关类名与方法说明如下:监听器类名 :OnTouchListener

设置监听器的方法 : setOnTouchListener

监听器需要重写的点击方法 : onTouch

  1. findViewById(R.id.button).setOnTouchListener(new OnTouchListener() {

  2.            @Override

  3.            public boolean onTouch(View v, MotionEvent event) {

  4.                switch (event.getAction()) {

  5.                case MotionEvent.ACTION_DOWN://按下

  6.                    break;

  7.                case MotionEvent.ACTION_UP://抬起

  8.                    break;

  9.                case MotionEvent.ACTION_MOVE://表示按下后移动了手指

  10.                    break;

  11.                }

  12.                return false;

  13.            }

  14.        });

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

设置监听器的方法 : setOnKeyListener

监听器需要重写的点击方法 : onKey

  1. findViewById(R.id.button).setOnKeyListener(new OnKeyListener() {

  2.            @Override

  3.            public boolean onKey(View v, int keyCode, KeyEvent event) {

  4.                switch (event.getAction()) {  

  5.                   case KeyEvent.ACTION_UP:             //键盘松开  

  6.                       Toast.makeText(SQLiteActivity.this, ""+keyCode, 0).show();

  7.                       break;

  8.                   case KeyEvent.ACTION_DOWN:          //键盘按下  

  9.                       break;  

  10.                }

  11.                return false;

  12.            }

  13.        });

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

设置监听器的方法 : setOnFocusChangeListener

监听器需要重写的点击方法 : onFocusChange

  1. findViewById(R.id.button1).setOnFocusChangeListener(new OnFocusChangeListener() {

  2.            @Override

  3.            public void onFocusChange(View v, boolean hasFocus) {

  4.                 Toast.makeText(SQLiteActivity.this, "1:"+hasFocus, 0).show();

  5.            }

  6.        });

  7.        findViewById(R.id.button2).setOnFocusChangeListener(new OnFocusChangeListener() {

  8.            @Override

  9.            public void onFocusChange(View v, boolean hasFocus) {

  10.                 Toast.makeText(SQLiteActivity.this, "2:"+hasFocus, 0).show();

  11.            }

  12.        });


3. 对话框按钮点击

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

setNegativeButton : 设置否定按钮的监听器,一般是取消

setNeutralButton : 设置中性按钮的监听器,这个很少用监听器需要重写的点击方法 :onClick

  1. protected void dialog() {

  2.        AlertDialog.Builder builder = new Builder(getActivity());

  3.        builder.setMessage(getResources().getString(R.string.factory_reset_dlg_text));//样式

  4.        builder.setPositiveButton(getResources().getString(R.string.other_ok), new DialogInterface.OnClickListener() {//确定

  5.            @Override

  6.            public void onClick(DialogInterface dialog, int which) {

  7.                dialog.dismiss();

  8.                resetFactory();

  9.            }

  10.        });

  11.        builder.setNegativeButton(getResources().getString(R.string.other_cancel), new DialogInterface.OnClickListener() {//取消

  12.            @Override

  13.            public void onClick(DialogInterface dialog, int which) {

  14.                dialog.dismiss();

  15.            }

  16.        });

  17.        builder.create().show();

  18.    }


4. 列表点击

 a、单项选择事件,一般用于Spinner控件,在某个列表元素被选中时触发。相关类名与方法说明如下:监听器类名 :AdapterView.OnItemSelectedListener

设置监听器的方法 : setOnItemSelectedListener

监听器需要重写的点击方法 : 

onItemSelected : 列表项被选中时调用

onNothingSelected : 没有选择任何项时调用,该方法一般为空

  1. mySpinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() {//选择item的选择点击监听事件  

  2.                    public void onItemSelected(AdapterView<?> arg0, View arg1,  

  3.                            int arg2, long arg3) {  

  4.                        // TODO Auto-generated method stub  

  5.                        // 将所选mySpinner 的值带入myTextView 中  

  6.                        myTextView.setText("您选择的是:" + adapter.getItem(arg2));//文本说明  

  7.                    }  

  8.                    public void onNothingSelected(AdapterView<?> arg0) {  

  9.                        // TODO Auto-generated method stub  

  10.                        myTextView.setText("Nothing");  

  11.                    }  

  12.                });

b、单项点击事件,一般用于ListView控件和GridView控件,在某个元素被点击时触发。相关类名与方法说明如下:

 监听器类名 : AdapterView.OnItemClickListener

设置监听器的方法 : setOnItemClickListener

监听器需要重写的点击方法 : onItemClick

  1. /**

  2.     * 响应ListView中item的点击事件

  3.     */

  4.     @Override

  5.    public void onItemClick(AdapterView<?> arg0, View v, int position, long id) {

  6.         Toast.makeText(this, "listview的item被点击了!,点击的位置是-->" + position,

  7.                Toast.LENGTH_SHORT).show();

  8.    }

c、单项长按事件,一般用于ListView控件和GridView控件,在某个元素被长按时触发。相关类名与方法说明如下:

 监听器类名 : AdapterView.OnItemLongClickListener

设置监听器的方法 : setOnItemLongClickListener

监听器需要重写的点击方法 : onItemLongClick

  1. /**

  2.     * 响应ListView中item的点击事件

  3.     */

  4.     @Override

  5.    public void onItemLongClick(AdapterView<?> arg0, View v, int position, long id) {

  6.         Toast.makeText(this, "listview的item被点击了!,点击的位置是-->" + position,

  7.                Toast.LENGTH_SHORT).show();

  8.    }

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

设置监听器的方法 : setListNavigationCallbacks

监听器需要重写的点击方法 : onNavigationItemSelected

  1. navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {  

  2.    @Override  

  3.    public boolean onNavigationItemSelected(MenuItem item) {  

  4.        //在这里处理item的点击事件  

  5.        return true;  

  6.    }  

  7. });

b、标签导航项的点击事件,导航模式需设置为ActionBar.NAVIGATIONMODETABS,用于响应具体标签页的选中事件。相关类名与方法说明如下:监听器类名 : ActionBar.TabListener

设置监听器的方法 : setTabListener

监听器需要重写的点击方法 : onTabSelected : 在标签页选中时调用

onTabUnselected : 在标签页取消选中时调用,该方法一般为空onTabReselected : 在标签页在选中状态下再次选中时调用,该方法一般为空

  1. public class TabListener<T extends Fragment> implements ActionBar.TabListener {  

  2.    private Fragment mFragment;  

  3.    private final Activity mActivity;  

  4.    private final String mTag;  

  5.    private final Class<T> mClass;  

  6.    public TabListener(Activity activity, String tag, Class<T> clz) {  

  7.        mActivity = activity;  

  8.        mTag = tag;  

  9.        mClass = clz;  

  10.    }  

  11.    public void onTabSelected(Tab tab, FragmentTransaction ft) {  

  12.        if (mFragment == null) {  

  13.            mFragment = Fragment.instantiate(mActivity, mClass.getName());  

  14.            ft.add(android.R.id.content, mFragment, mTag);  

  15.        } else {  

  16.            ft.attach(mFragment);  

  17.        }  

  18.    }  

  19.    public void onTabUnselected(Tab tab, FragmentTransaction ft) {  

  20.        if (mFragment != null) {  

  21.            ft.detach(mFragment);  

  22.        }  

  23.    }  

  24.    public void onTabReselected(Tab tab, FragmentTransaction ft) {  

  25.    }  

  26. }  

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

如果是上下文菜单,则调用onContextItemSelectedonOptionsItemSelected : 在选项菜单的菜单项选中时调用。onContextItemSelected: 在上下文菜单的菜单项选中时调用。

  1. @Override  

  2. public boolean onMenuItemSelected(int featureId, MenuItem item) {  

  3.    return false;  

  4. }


5. 物理按键点击

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

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

  1. private long mTickForShow;

  2.    @Override

  3.    public void onBackPressed() {

  4.        if (SystemClock.uptimeMillis()-mTickForShow<3000) {

  5.            finish();

  6.        }else{

  7.            Toast.makeText(getApplication(), ""+getString(R.string.goout).toString(), 0).show();

  8.        }

  9.        mTickForShow=SystemClock.uptimeMillis();    

  10.    }


笔记30 | 数据存储之SQLite的介绍及使用

笔记29 | 整理Java的容器类

笔记28 | 学习一个简单好用的下拉刷新、上拉加载控件

笔记27 | WindowManager实现悬浮窗口总结

笔记26 | 总结Android的获取系统时间的几种方法



结束