Android详细教程(基础篇):六、Android事件处理原理详解

本文深入解析Android事件处理原理,包括OnClickListener、OnCheckedChangeListener、OnItemSelectedListener等常见事件监听器的使用,以及屏幕旋转、日期时间监听、长按、键盘事件和触摸事件的处理。还详细介绍了ListView的OnItemClickListener和手势识别机制,如SimpleOnGestureListener的应用。
摘要由CSDN通过智能技术生成

6.1. Android事件处理原理

了解事件处理的作用。
了解常用的事件及相关处理接口
基本上每个组件都会存在相应的事件处理操作,但不管有多少个组件,其基本的操作流程都是一样的。
在这里插入图片描述
如果要进行事件处理,则必须有一个事件源。如按按钮、修改选项等,每一次的动作基本上都会有所监听,
而当用户执行了这些操作之后就自动的产生了一个事件源。
一旦有了事件之后肯定要使用某些方法进行事件的处理,事件以及事件处理方法的划分。
在这里插入图片描述
每一个事件处理的接口都需要一个特定的方法进行事件的绑定操作,这些事件处理接口的子类对象需
要通过以上方法绑定组件之上,以后如果出现了相关的事件处理操作之后才会执行。

6.2. OnClickListener (单击事件)

在手机使用的过程中,经常要使用按钮触发一些基本的操作,这个时候就可以通过单击事件完成,单击事件使用

View.OnClickListener(OnClickListene是View的内部接口)接口进行事件的处理,此接口定义如下:
public static interface View.OnClickListener{
    public void onClick(View v);
}

用户可以使用View.OnClickListener接口进行单击处理类的编写。
里面的OnClick()方法表示的是单击组件之后执行的方法体,而传入的是一个操作此方法的组件的对象,因为所有
的组件都是View的子类。
本程序是肯定要Activity的支持

6.2.1 范例1:显示输入的内容:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".ClickActivity" >
     <EditText
        android:id="@+id/myEdit"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
       />
      <Button
        android:id="@+id/myButton"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="显示输入信息" />
      <TextView
        android:id="@+id/myText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="输入的信息是:" />

</LinearLayout>

package com.makyan.demo;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class ClickActivity extends Activity {
	private EditText et = null;
	private Button bt = null;
	private TextView tv = null;
	static String info = null;
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_click);
		et = (EditText) super.findViewById(R.id.myEdit);
		bt = (Button) super.findViewById(R.id.myButton);
		tv = (TextView) super.findViewById(R.id.myText);
		bt.setOnClickListener(new OnClickListener() { //设置事件
			public void onClick(View v) {
				info = et.getText().toString(); //获取输入内容
				System.out.println("sssss:"+info);
				tv.setText("您输入的信息是:" + info);  //更新输入内容
			}
		});
	}
}

在这里插入图片描述

6.2.2 范例2:四则运算:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".ClickActivity" >
    <LinearLayout 
        android:id="@+id/linear1"
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
       <EditText
	        android:id="@+id/operationEdt1"
	        android:layout_width="wrap_content"
	        android:layout_height="wrap_content"
	        android:text="请输入数字..." />
        <EditText
	        android:id="@+id/operationEdt2"
	        android:layout_width="wrap_content"
	        android:layout_height="wrap_content"
	        android:text="请输入数字..." />
        
        <TextView
	        android:id="@+id/operationText"
	        android:layout_width="wrap_content"
	        android:layout_height="wrap_content"
	        android:text="=" />
       <TextView
	        android:id="@+id/resultText"
	        android:layout_width="wrap_content"
	        android:layout_height="wrap_content"
	        android:text="计算结果" />
  </LinearLayout>
     <LinearLayout 
        android:id="@+id/linear2"
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
          <Button
		        android:id="@+id/addButton"
		        android:layout_width="wrap_content"
		        android:layout_height="wrap_content"
		        android:text="+" />
	      <Button
		        android:id="@+id/subButton"
		        android:layout_width="wrap_content"
		        android:layout_height="wrap_content"
		        android:text="-" />
	      <Button
		        android:id="@+id/mulButton"
		        android:layout_width="wrap_content"
		        android:layout_height="wrap_content"
		        android:text="*" />
	      <Button
		        android:id="@+id/divButton"
		        android:layout_width="wrap_content"
		        android:layout_height="wrap_content"
		        android:text="÷" />
       </LinearLayout>
</LinearLayout>

——————————————————————————————————————————————

package com.makyan.demo;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class OperationClickActivity extends Activity {
	private EditText edt1 = null;
	private EditText edt2 = null;
	private Button addButton = null;  //加
	private Button subButton = null;  //减
	private Button mulButton = null;  //乘
	private Button divButton = null;  //除
	private TextView showText = null; //计算结果
	int num1;
	int num2;

	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_operation_click);
		edt1 = (EditText) super.findViewById(R.id.operationEdt1);
		edt2 = (EditText) super.findViewById(R.id.operationEdt2);
		addButton = (Button) super.findViewById(R.id.addButton);
		subButton = (Button) super.findViewById(R.id.subButton);
		mulButton = (Button) super.findViewById(R.id.mulButton);
		divButton = (Button) super.findViewById(R.id.divButton);
		showText = (TextView) super.findViewById(R.id.resultText);
		addButton.setOnClickListener(new OnClickListener() {
			
			public void onClick(View v) {
				num1 = Integer.parseInt(edt1.getText().toString());
				num2 = Integer.parseInt(edt2.getText().toString());
				showText.setText(String.valueOf(num1 + num2));
			}
		});
		subButton.setOnClickListener(new OnClickListener() {
			
			public void onClick(View v) {
				num1 = Integer.parseInt(edt1.getText().toString());
				num2 = Integer.parseInt(edt2.getText().toString());
				showText.setText(String.valueOf(num1 - num2));
			}
		});
		mulButton.setOnClickListener(new OnClickListener() {
			
			public void onClick(View v) {
				num1 = Integer.parseInt(edt1.getText().toString());
				num2 = Integer.parseInt(edt2.getText().toString());
				showText.setText(String.valueOf(num1 * num2));
			}
		});
		divButton.setOnClickListener(new OnClickListener() {
			
			public void onClick(View v) {
				num1 = Integer.parseInt(edt1.getText().toString());
				num2 = Integer.parseInt(edt2.getText().toString());
				showText.setText(String.valueOf(num1 /num2));
			}
		});
		
		edt1.setOnClickListener(new OnClickListener() {
			
			public void onClick(View v) {
				edt1.setText("");
			}
		});
		edt2.setOnClickListener(new OnClickListener() {
			
			public void onClick(View v) {
				edt2.setText("");
			}
		});
	}
}

在这里插入图片描述

6.2.3 范例3:屏幕方向改变

很多时候游戏的开发需要手机采用横屏的方式显示,所以在Android中也可以进行屏幕切换的操作。
需Activity类的支持,Activity提供的方法:
在这里插入图片描述
如果手机的屏幕发生改变,肯定属于系统的设置发生了改变,所以一旦发生了系统的设置改变,会自动的执行
onConfigurationChanged()方法。
而对于所有手机的屏幕的方向如果要设置肯定需要一个int型的数据。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
	xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical" 
	android:layout_width="fill_parent"
	android:layout_height="fill_parent">
	<Button
		android:id="@+id/change" 
		android:layout_width="wrap_content"
		android:layout_height="wrap_content" 
		android:text="改变屏幕方向为横屏显示(当前为竖屏显示)" />
	<ImageView
		android:id="@+id/img" 
		android:layout_width="wrap_content"
		android:layout_height="wrap_content" 
		android:src="@drawable/mldn_portrait"/>
</LinearLayout>

牵涉到系统改变的,都需要给配置修改系统响应的权限

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.makyan.demo"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk
        android:minSdkVersion="17"
        android:targetSdkVersion="17" />
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.makyan.demo.OratationClickActivity"
            android:label="@string/app_name"
          <!--  默认屏幕显示方向为竖屏 -- >
            android:screenOrientation="portrait" 
          <!--  配置configchanges事件 -- >
            android:configChanges="orientation|keyboard">
            <intent-filter>
                <action android:name
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值