Android 监听器部分使用

Android监听事件学习笔记

很抱歉本文的图片没了,如果希望获取代码的和pdf(有图片)学习的可以下载附上的pdf链接:

1.在Android中,View只是提供一个视觉的交互界面,如果要让View响应用户的交互行为,就需要为View添加事件处理,如前面案例或实验中使用较多的View.OnClickListener事件侦听器,一般来说事件侦听器都是包含回调方法的抽象接口,例如OnClickListener对应的回调方法为OnClick()。实际上,除了OnClickListener事件外,Android中的事件侦听器还有(部分罗列):

侦听器 回调方法 描述

OnLongClickListener() OnLongClick() 对长点击事件进行监听

OnFocusChangeListener() OnFocusChange() 对聚焦事件进行监听

OnKeyListener() OnKey() 对按键输入进监听

OnTouchListener() OnTouch() 对某个控件的触摸检测

OnMenuItemClickListener() OnMenuItemClick() 选项菜单点击检测

OnCreateContextMenuListener() OnCreateContextMenu() 是用来处理上下文菜单显示事件的监听接口

请查阅相关资料或书籍,比较系统地学习一下Android中的事件处理,找出以上这些侦听器对应的使用场景,并补充其他相关的事件处理,如果可能的话请编程对其中的部分事件进行实际的验证。

我通过自己编写的一个案例来对上面六个Android事件监听器进行说明:

image-20200329232849453
  1. OnLongClickListener()

    ​ 这是一个用于长点击事件监听的监听器,平时我们只是通过点击然后获得相应,但是如果想要获得长时间点击时候的响应就需要使用这个监听器,具体使用可以用在长点击弹出菜单:

    • 代码:

      //给这个按钮设置长按监听
              longclickbutton = (Button) findViewById(R.id.button);
              longclickbutton.setOnLongClickListener(new View.OnLongClickListener() {
                  @Override
                  public boolean onLongClick(View v) {
                      //输出消息
                      Toast.makeText(MainActivity.this, "我是长按button", Toast.LENGTH_SHORT).show();
                      return true;
                  }
              });
      
    • 当长时间点击时就可以获得相应,这里输出一个弹出框。

      image-20200329232933614

  2. OnFocusChangeListener()

    ​ 这是用于焦点监听的监听器,比如输入框获得点击就会被监听到,这样当用户点击输入框时可以进行相对于的响应,比如显示输入不符合标准,就可以在输入时候给用户提示:

    • 代码:

      //聚焦
      foucus1 = (EditText) findViewById(R.id.editText);
      foucus1.setOnFocusChangeListener(new View.OnFocusChangeListener() {
          @Override
          public void onFocusChange(View v, boolean hasFocus) {
              if(hasFocus==true){
                  foucus1.setHint("现在聚焦于此");
              }else{
                  foucus1.setHint("现在聚焦于他处");
              }
          }
      });
      foucus2 = (EditText) findViewById(R.id.editText2);
      foucus2.setOnFocusChangeListener(new View.OnFocusChangeListener() {
          @Override
          public void onFocusChange(View v, boolean hasFocus) {
              if(hasFocus==true){
                  foucus2.setHint("现在聚焦于此");
              }else{
                  foucus2.setHint("现在聚焦于他处");
              }
          }
      });
      
    • 这里用来两个输入框,当其中一个获取焦点显示“现在聚焦于此”,另外一个就无法获取焦点输出:“现在聚焦于他处”:

      image-20200329233330968
  3. OnKeyListener()

    ​ 这是一个用于获得键盘监听事件的监听器,当用户键盘输入时候就会立刻获得相应,这里用一个计算BMI的例子来举例,我对体重进行监听,当体重输入时就会显示出当前计算的BMI的值:

    • 代码:
    //按键监听
            key1 = (EditText) findViewById(R.id.editText4);
            key2 = (EditText) findViewById(R.id.editText5);
            textview = (TextView) findViewById(R.id.textView2);
            key2.setOnKeyListener(new EditText.OnKeyListener(){
                @Override
                public boolean onKey(View v, int keyCode, KeyEvent event) {
                    double x = Double.valueOf(key1.getText().toString());
                    double y = Double.valueOf(key2.getText().toString());
                    double z;
                    try{
                        z= y/x;
                    }catch (ArithmeticException exc){
                        Log.d(MainActivity.ACTIVITY_TAG,"计算错误");
                    }
                    textview.setText("BMI:"+y/x);
                    return false;
                }
            });
    
    • 显示效果:
image-20200329233623471
  1. OnTouchListener()

    ​ 触摸检测用于检测一些按下,松开,拖动等事件,使用也比较广泛,这里用一个按下松开事件进行说明:

    • 代码:
    //触摸监听
            TouchButton = (Button) findViewById(R.id.button4);
            TouchButton.setOnTouchListener(new View.OnTouchListener(){
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    switch (event.getAction()) {
                        case MotionEvent.ACTION_DOWN:
                            TouchButton.setText("按下");
                            break;
                        case MotionEvent.ACTION_UP:
                            TouchButton.setText("松开");
                            break;
                    }
                    return true;
                }
            });
    
    • 显示结果,当按下按钮显示按下,当松开按钮显示松开:

      image-20200329234120346[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dWP1fMiQ-1585498335655)(D:\桌面\image-20200329234132502.png)]

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b4bWg4OS-1585498335659)(D:\桌面\image-20200329234132502.png)]

  2. OnMenuItemClickListener()

    ​ 选项菜单监听器,也就是在右上角的菜单,可以对选项进行监听:

    • 代码:

      //选项菜单点击监听
          @Override
          public boolean onCreateOptionsMenu(Menu menu) {
              super.onCreateOptionsMenu(menu);
              getMenuInflater().inflate(R.menu.main_menu,menu);
              menu.findItem(R.id.menu_login).setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
                  @Override
                  public boolean onMenuItemClick(MenuItem item) {
                      Toast.makeText(MainActivity.this, "登录按钮按下", Toast.LENGTH_SHORT).show();
                      return true;
                  }
              });
              menu.findItem(R.id.menu_setting).setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
                  @Override
                  public boolean onMenuItemClick(MenuItem item) {
                      Toast.makeText(MainActivity.this, "设置按钮按下", Toast.LENGTH_SHORT).show();
                      return true;
                  }
              });
              menu.findItem(R.id.menu_exit).setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
                  @Override
                  public boolean onMenuItemClick(MenuItem item) {
                      Toast.makeText(MainActivity.this, "退出按钮按下", Toast.LENGTH_SHORT).show();
                      return true;
                  }
              });
              return true;
          }
      

      显示效果:

      image-20200329234534629

      点击登录:

      image-20200329234553169
  3. OnCreateContextMenuListener()

    是用来处理上下文菜单显示事件的监听接口

    • 代码:

      //长按显示上下文菜单按钮
              ContextMenuButton = (Button) findViewById(R.id.button2);
              ContextMenuButton.setOnLongClickListener(new View.OnLongClickListener() {
                  @Override
                  public boolean onLongClick(View v) {
                      registerForContextMenu(v);
                      openContextMenu(v);
                      return true;
                  }
              });
              
      
      @Override
          public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
              super.onCreateContextMenu(menu, v, menuInfo);
              getMenuInflater().inflate(R.menu.main_menu,menu);
              menu.findItem(R.id.menu_login).setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
                  @Override
                  public boolean onMenuItemClick(MenuItem item) {
                      Toast.makeText(MainActivity.this, "登录按钮按下", Toast.LENGTH_SHORT).show();
                      return true;
                  }
              });
              menu.findItem(R.id.menu_setting).setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
                  @Override
                  public boolean onMenuItemClick(MenuItem item) {
                      Toast.makeText(MainActivity.this, "设置按钮按下", Toast.LENGTH_SHORT).show();
                      return true;
                  }
              });
              menu.findItem(R.id.menu_exit).setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
                  @Override
                  public boolean onMenuItemClick(MenuItem item) {
                      Toast.makeText(MainActivity.this, "退出按钮按下", Toast.LENGTH_SHORT).show();
                      return true;
                  }
              });
      
          }
      
      
    • 显示结果

      image-20200329234753038

image-20200329234811820

除了这些监听器之外还有很多其他的监听器,安坐这些监听器,有了这些监听器才可以让安卓更加方便使用。

								<img src="D:\桌面\image-20200329234753038.png" alt="image-20200329234753038" style="zoom:50%;"/>
image-20200329234811820

除了这些监听器之外还有很多其他的监听器,安坐这些监听器,有了这些监听器才可以让安卓更加方便使用。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值