当前位置: 首页 > news >正文

Android开发学习之事件处理和Button具体解释

Android的事件处理机制: 


  1.基于监听器的事件处理 --- 组件绑定特定的事件监听器   --- 重点
  2.基于回调的事件处理   --- 主要做法是重写Android组件特定的回调函数,
  Android大部分界面组件都提供了事件响应的回调函数。我们仅仅要重写它们即可


监听器模型:
  (1)事件源Event Source:产生事件的来源,一般是各种组件,如button。窗体等。




 (2)事件Event:事件封装了界面组件上发生的特定事件的详细信息,假设监听器须要获取界面组件上所发生事件的相关信息。一般通过事件Event对象来传递。


 (3)事件监听器Event Listener:负责监听事件源发生的事件,并对不同的事件做对应的处理。


基于监听器的事件处理:
   1.内部类作为监听器

   2.匿名内部类作为事件监听器类

   3.XML布局文件里指定处理方法



1.  btnLogin=(Button)super.findViewById(R.id.login);  
  
     //为button注冊监听事件  
    btnLogin.setOnClickListener(new LoginOnClickListener());  
         }  
         //事件监听器  
    private class LoginOnClickListener implements OnClickListener{  
        public void onClick(View v){  
            String username=tvUserName.getText().toString();  
            String password=tvPassword.getText().toString();  
            String info="用户名:"+username+"☆☆☆密码:"+password;  
            Toast.makeText(getApplicationContext(), info,Toast.LENGTH_SHORT).show();  
        }  
    }  
    
2.  btnLogin=(Button)super.findViewById(R.id.login);  
    btnLogin.setOnClickListener(new OnClickListener(){  
       public void onClick(View v){  
          String username=tvUserName.getText().toString();  
          String password=tvPassword.getText().toString();  
          String info="用户名:"+username+"☆☆☆密码:"+password;  
          Toast.makeText(getApplicationContext(), info,Toast.LENGTH_SHORT).show();  
      }  
    });     








  Button事件处理方法:
 
 1.
        myButton1=(Button)findViewById(R.id.myButton1);  
        myButton2=(Button)findViewById(R.id.myButton2);  
          
        //使用匿名类注冊Button事件  
        myButton1.setOnClickListener(new OnClickListener()  
        {         
            public void onClick(View v)  
            {  
                Toast.makeText(ButtonDemoActivity.this, "你点击了button1",Toast.LENGTH_LONG).show();  
            }  
        });  
        myButton2.setOnClickListener(new OnClickListener()  
        {         
            public void onClick(View v)  
            {  
                Toast.makeText(ButtonDemoActivity.this, "你点击了button2",Toast.LENGTH_LONG).show();  
            }  
        });  




2. 
   myButton1.setOnClickListener(new ButtonClick());  
   myButton2.setOnClickListener(new ButtonClick()); 


  //创建一个类。来响应OnClickListener  
    class ButtonClick implements OnClickListener  
    {  
        public void onClick(View v)  
        {  
            switch (v.getId()) {  
            case R.id.myButton1:  
                Toast.makeText(ButtonDemoActivity.this, "你点击了button1",Toast.LENGTH_LONG).show();  
                break;  
            case R.id.myButton2:  
                Toast.makeText(ButtonDemoActivity.this, "你点击了button2",Toast.LENGTH_LONG).show();  
                break;  
            default:  
                break;  
            }  
        }         
    }  




3. 
    XML中定义处理方法:
    <Button 
           android:onClick="clickIt">
           
    public void clickIt(View view){
      //处理button点击事件的方法
    }


定义圆角的Button


1.res->drawable-mdpi -> shape.xml


       shape.xml   --- button样式定制文件XML


<?xml version="1.0" encoding="UTF-8"?> 
<shape 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
<!--定义填充颜色-->
<solid android:color="#FFFFFF"/>
<!--设置button的四个角为弧形-->
<!--android:radius 弧形半径-->
<corners android:radius="5dip">


<!--padding:button 里边的文字与Button边界的间距-->
<padding
   android:left="10dp"
   android:top="10dp" 
   android:right="10dp" 
   android:bottom="10dp"/>
</shape>


      mainLayout.xml    ---- 布局文件


在通过android:background="@drawable/shape"中使用shape.xml资源


<Button
       android:id="@+id/button1"
       android:text="圆角button"
       android:layout_width="wrap_content"   
       android:layout_height="wrap_content"  
       android:background="@drawable/shape"/>

相关文章:

  • activity生命周期的onPause和onStop
  • vue 表单提交
  • GitHub GraphQL API已正式可用
  • 《快学Scala》第五章 类
  • 技术人员的发展之路 程序员规划
  • 详谈再论JAVA获取本机IP地址
  • Unity里包裹Debug,且不影响Debug的重定向
  • AtCoder Regular Contest 075 D Widespread
  • 简易相应式布局。
  • 一个简单有趣的微信聊天机器人
  • windows上安装redis
  • Date类型
  • C#读写配置文件Config
  • js 简单实现隐藏和显示
  • 微软ASP.NET网站部署指南(9):部署数据库更新
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • Apache的基本使用
  • Codepen 每日精选(2018-3-25)
  • go语言学习初探(一)
  • javascript 总结(常用工具类的封装)
  • Median of Two Sorted Arrays
  • rabbitmq延迟消息示例
  • storm drpc实例
  • Vue2.0 实现互斥
  • XForms - 更强大的Form
  • 来,膜拜下android roadmap,强大的执行力
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 算法---两个栈实现一个队列
  • 微信小程序:实现悬浮返回和分享按钮
  • 微信小程序填坑清单
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • ​VRRP 虚拟路由冗余协议(华为)
  • #162 (Div. 2)
  • %@ page import=%的用法
  • (02)Hive SQL编译成MapReduce任务的过程
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (算法)N皇后问题
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • (转)ObjectiveC 深浅拷贝学习
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • ../depcomp: line 571: exec: g++: not found
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .NET 中使用 Mutex 进行跨越进程边界的同步
  • .netcore 6.0/7.0项目迁移至.netcore 8.0 注意事项
  • .NET企业级应用架构设计系列之应用服务器
  • @JsonSerialize注解的使用
  • [ solr入门 ] - 利用solrJ进行检索
  • [ vulhub漏洞复现篇 ] Django SQL注入漏洞复现 CVE-2021-35042
  • [AutoSar]BSW_Com07 CAN报文接收流程的函数调用
  • [BZOJ1053][HAOI2007]反素数ant
  • [ESP32 IDF]web server