前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >笔记31 | 归纳总结Android的点击事件

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

作者头像
项勇
发布2018-06-19 15:28:44
1.5K0
发布2018-06-19 15:28:44
举报
文章被收录于专栏:项勇

地址

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

目录

  • 常见按钮点击
  • 点击的其他方式
  • 对话框按钮点击
  • 列表点击
  • 物理键点击


1. 常见按钮点击

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

设置监听器的方法 : setOnClickListener

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

代码语言:javascript
复制
findViewById(R.id.button).setOnClickListener(new OnClickListener() {            
            @Override
            public void onClick(View v) {               
            }
        });

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

设置监听器的方法 : setOnLongClickListener

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

代码语言:javascript
复制
findViewById(R.id.button).setOnLongClickListener(new OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                return false;
            }
        });

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

设置监听器的方法 : setOnCheckedChangeListener

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

代码语言:javascript
复制
findViewById(R.id.button).setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
            }
        });

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

设置监听器的方法 : setOnCheckedChangeListener

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

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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 : 没有选择任何项时调用,该方法一般为空

代码语言:javascript
复制
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

代码语言:javascript
复制
/**
     * 响应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

代码语言:javascript
复制
/**
     * 响应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

代码语言:javascript
复制
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {  
    @Override  
    public boolean onNavigationItemSelected(MenuItem item) {  
        //在这里处理item的点击事件  
        return true;  
    }  
});

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

设置监听器的方法 : setTabListener

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

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

代码语言:javascript
复制
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 : 在上下文菜单的菜单项选中时调用。

代码语言:javascript
复制
@Override  
public boolean onMenuItemSelected(int featureId, MenuItem item) {  
    return false;  
}

5. 物理按键点击

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

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

代码语言:javascript
复制
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();    
    }

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-11-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 项勇 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 地址
    • 目录
    • 1. 常见按钮点击
    • 2. 点击的其他方式
    • 3. 对话框按钮点击
    • 4. 列表点击
    • 5. 物理按键点击
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档