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

地址

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();    
    }

原文发布于微信公众号 - 项勇(xiangy_life)

原文发表时间:2017-11-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏九彩拼盘的叨叨叨

前端开发利器:Emmet 介绍 其他

Emmet 是一个能提高前端开发效率的编辑器插件,支持 Sublime,Atom,TextMate,Nodepad++ 等主流编辑器。Emmet 定义了一些缩写...

502
来自专栏Hongten

android开发_TimePicker控件

651
来自专栏我的博客

安卓开发之简单组件使用

一、TextView组件(文本框) <TextView android:id=”@+id/firstText” android:text=”第一行“ andro...

2606
来自专栏小巫技术博客

A021-列表容器之GridView

GridView是Android的另一个列表容器,用法也跟ListView类似,它的布局是一个网格,一行可以有多个项,并且整个视图可以滚动,我们常见的应用有手机...

983
来自专栏偏前端工程师的驿站

JS魔法堂:关于元素位置和鼠标位置的属性

一、关于鼠标位置的属性                           1. 触发鼠标事件的区域       盒子模型中的border,padding,co...

18410
来自专栏偏前端工程师的驿站

当css属性width设为100%时

  平常在写页面html代码时,经常会使用到width:100%来使控件宽度为父控件的内容宽度。但如果父控件为body,而且没有明确设置body的宽度,那么就会...

1875
来自专栏游戏杂谈

AS3 使用Loader对象加载外部图片

比如要在loading图片的时候显示一个背景gif图(表示正在加载图片)或是显示加载进步等等

773
来自专栏GreenLeaves

WebStorm 快键键

ctrl+/ 单行注释 ctrl+shift+/ 块注释 ctrl+shift+ +/- 展开/折叠 ctrl+alt+L 格式化代码 ctrl+shift+ ...

1787
来自专栏前端知识分享

第165天:canvas绘制圆环旋转动画

913
来自专栏林德熙的博客

WPF 等距布局

实际做的效果很简单,因为在开发我容易就用到了等距的控件。等距控件就是在指定的宽度下,平均把控件放在水平的地方,这样相等于 StackPanel 的水平,但是没有...

431

扫码关注云+社区