Android实训三-事件监听器

第3章、事件监听器

3.1 基本概念

一、在Android 应用开发过程中,常用监听事件如下:

(1) ListView事件监听 
setOn ItemSelectedListener:鼠标滚动时触发 
setOnItemClickListener: 点击时触发 
(2 )EditText 事件监听 
setOnKeyListener: 获取焦点时触发 
(3) RadioGroup事件监听 
setOnCheckedChangeListener: 点击时触发 
(4) CheckBox事件监听 
setOnCheckedChangeListener :点击时触发 
(5 )Spinner事件监听 
setOnltemSelectedListener:点击时触发

(6) DatePicker 事件监听

onDateChangedListener: 日期改变时触发

(7 )DatePickerDialog 事件监听 
onDateSetListener:设置日期时触发 
(8) TimePicker 事件监听 
onTimeChangedListener:时间改变时触发 
(9 )TimePickerDialog 事件监听 
onTimeSetListener: 设置时间时触发 
(10)Button. ImageButton 事件监听 
setOnClickListener: 点击时触发 
(11)Menu 事件监听 
onOptionsltemSelected; 点击时触发 
(12 )Gallery 事件监听 
setOnItemClickListener: 点击时触发 
(13 )GridView 事件监听 
setOnltemClickListener: 点击时触发

二、实现事件监听器的方法:

  1. 内部类形式
  2. 匿名内部类形式
  3. 外部类形式
  4. Activity本身作为事件监听器类
  5. 直接绑定到标签

三、事件监听三要素

1、事件源

2、监听器

3、事件处理器

3.2 监听实例

设置字体加粗:test.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));

设置字体倾斜:(对英文有效,中文倾斜需要使用Paint类或者样式实现):test.setTypeface(Typeface.defaultFromStyle(Typeface.ITALIC));

 

一、使用内部类的方式:

MainActivity.java中的代码:

package com.example.demo2;

import android.os.Bundle;
import android.app.Activity;
import android.content.res.ColorStateList;
import android.graphics.Color;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

//1、内部类作为事件监听器 
public class MainActivity extends Activity {
	MyListener myListener = new MyListener();
	MyListener2 myListener2 = new MyListener2();
	// 1、定义变量
	private Button red, blue, green, bigger, smaller;
	private TextView test;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		// 2、变量关联布局控件
		red = (Button) findViewById(R.id.red); // 关联布局文件中的控件
		blue = (Button) findViewById(R.id.blue);
		green = (Button) findViewById(R.id.green);
		bigger = (Button) findViewById(R.id.bigger);
		smaller = (Button) findViewById(R.id.smaller);
		
		test = (TextView) findViewById(R.id.test);
		
		red.setOnClickListener(myListener);// 1、事件源添加事件监听
		blue.setOnClickListener(myListener);// 1、事件源添加事件监听
		green.setOnClickListener(myListener);// 1、事件源添加事件监听
		
		bigger.setOnClickListener(myListener2);// 1、事件源添加事件监听
		smaller.setOnClickListener(myListener2);// 1、事件源添加事件监听
	}

	private class MyListener implements OnClickListener { // 3、监听器

		@Override
		public void onClick(View v) { // 2、事件处理器
			// TODO Auto-generated method stub
			switch (v.getId()) {
			case R.id.red:
				test.setTextColor(Color.RED);
				break;
			case R.id.blue:
				test.setTextColor(Color.BLUE);
				break;
			case R.id.green:
				test.setTextColor(Color.GREEN);
				break;
			default:
				break;
			}
		}
	}
	private class MyListener2 implements OnClickListener { // 3、监听器
         private int size=12;
		@Override
		public void onClick(View v) { // 2、事件处理器
			// TODO Auto-generated method stub
			switch (v.getId()) {
			case R.id.bigger:
				size=(int) test.getTextSize();//获取当前字体的大小并转换成整数后赋值给变量 n
				size+=4;
				break;
			case R.id.smaller:
				size=(int) test.getTextSize();//获取当前字体的大小并转换成整数后赋值给变量 n
				size-=4;
				break;
			default:
				break;
			}
			if(size>72){
				size=72;
			}
			else if(size<8){
				size=8;
			}
			test.setTextSize(size);
		}
	}
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}

布局管理文件代码为:

<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=".MainActivity" >

    <TextView
        android:id="@+id/test"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="@string/test" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/color" />

        <Button
            android:id="@+id/red"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/red" />

        <Button
            android:id="@+id/green"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/green" />

        <Button
            android:id="@+id/blue"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/blue" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/size" />

        <Button
            android:id="@+id/bigger"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/bigger" />

        <Button
            android:id="@+id/smaller"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/smaller" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/style" />

        <Button
            android:id="@+id/bold"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/bold" />

        <Button
            android:id="@+id/itatic"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/itatic" />

        <Button
            android:id="@+id/normal"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/normal" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/content" />

        <EditText
            android:id="@+id/content"
            android:layout_width="200dp"
            android:layout_height="wrap_content" />
    </LinearLayout>

</LinearLayout>

 String.xml文件代码:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">EditTest</string>
    <string name="action_settings">Settings</string>
    <string name="hello_world">Hello world!</string>
    
    <string name="test">测试文字,测试文字!</string>
    
    <string name="color">颜色</string>
    <string name="red">红色</string>
    <string name="green">绿色</string>
    <string name="blue">蓝色</string>
   
    <string name="size">大小</string>
    <string name="bigger">增大</string>
    <string name="smaller">缩小</string>
    
    <string name="style">样式</string>
    <string name="bold">加粗</string>
    <string name="itatic">倾斜</string>
    <string name="normal">正常</string>
    
    <string name="content">内容</string>
</resources>

二、外部类实现

1、新建工程文件

2、布局管理文件和内部类一样(复制上面代码);

3、Strings.xml文件和内部类一样(复制上面代码);

4、在同一个包下建立外部类OutterListener .java,代码如下:

import android.graphics.Color;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;

//事件监听器
public class OutterListener implements OnClickListener {
	private TextView test;
	private int size = 12;
	OutterListener(TextView textView) {
		this.test = textView;
	}
//事件处理器
	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.red:
			test.setTextColor(Color.RED);
			break;
		case R.id.green:
			test.setTextColor(Color.GREEN);
			break;
		case R.id.blue:
			test.setTextColor(Color.BLUE);
		case R.id.bigger:
			size = (int) test.getTextSize();
			size += 4;
			break;
		case R.id.smaller:
			size = (int) test.getTextSize();
			size -= 4;
			break;
		default:
			break;
		}
		if (size >= 72) {
			size = 72;
		}
		if (size <= 8) {
			size = 8;
		}
		test.setTextSize(size);
	}
}

5、MainActivity.java中的代码:

public class MainActivity extends Activity {
	private Button red, green, blue, smaller, bigger;
	private TextView test;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		//关联到布局文件
		red = (Button) findViewById(R.id.red);
		green = (Button) findViewById(R.id.green);
		blue = (Button) findViewById(R.id.blue);
		bigger = (Button) findViewById(R.id.bigger);
		smaller = (Button) findViewById(R.id.smaller);
		test = (TextView) findViewById(R.id.test);	
		//外部类作为事件监听器
		OutterListener outterListener = new OutterListener(test);
		//对事件源进行事件的监听
		red.setOnClickListener(outterListener);
		green.setOnClickListener(outterListener);
		blue.setOnClickListener(outterListener);
		bigger.setOnClickListener(outterListener);
		smaller.setOnClickListener(outterListener);	
	}
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}
}

三、内部来实现颜色变化,外部类实现字体大小的变化(混合使用)

1、新建工程文件

2、布局管理文件和内部类一样(复制上面代码);

3、Strings.xml文件和内部类一样(复制上面代码);

4、在同一个包下建立外部类OutterListener .java,代码如下:

package iet.jxufe.cn.android;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;

public class OutterListener implements OnClickListener {
	private TextView test;
	private int size = 12;

	OutterListener(TextView textView) {
		this.test = textView;
	}

	@Override
	public void onClick(View v) {
		
		switch (v.getId()) {
		case R.id.bigger:
			size = (int) test.getTextSize();
			size += 4;
			break;
		case R.id.smaller:
			size = (int) test.getTextSize();
			size -= 4;
			break;
		default:
			break;
		}
		if (size >= 72) {
			size = 72;
		}
		if (size <= 8) {
			size = 8;
		}
		test.setTextSize(size);
	}

}

5、MainActivity.java中的代码:

package iet.jxufe.cn.android;

import android.os.Bundle;
import android.app.Activity;
import android.graphics.Color;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {
	MyListener myListener = new MyListener();
	private Button red, green, blue,smaller,bigger;
	private TextView test;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		red = (Button) findViewById(R.id.red);
		green = (Button) findViewById(R.id.green);
		blue = (Button) findViewById(R.id.blue);
		
		red.setOnClickListener(myListener);
		green.setOnClickListener(myListener);
		blue.setOnClickListener(myListener);
		
		test = (TextView) findViewById(R.id.test);
		
		bigger = (Button) findViewById(R.id.bigger);
		smaller = (Button) findViewById(R.id.smaller);
		
		OutterListener outterListener=new OutterListener(test);
		
		bigger.setOnClickListener(outterListener);
		smaller.setOnClickListener(outterListener);
		
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	private class MyListener implements OnClickListener {

		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			switch (v.getId()) {
			case R.id.red:
				test.setTextColor(Color.RED);

				break;
			case R.id.green:
				test.setTextColor(Color.GREEN);

				break;
			case R.id.blue:
				test.setTextColor(Color.BLUE);

				break;
			default:
				break;
			}
		}
	}

}

四、匿名内部类实现

1、新建工程文件

2、布局管理文件和内部类一样(复制上面代码);

3、Strings.xml文件和内部类一样(复制上面代码);

4、MainActivity.java中的代码如下:

import android.os.Bundle;
import android.app.Activity;
import android.graphics.Color;
import android.graphics.Typeface;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {
	private Button red, blue, green, bigger, smaller,bold,itatic,normal;
	private TextView test;
	private int size = 12;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		red = (Button) findViewById(R.id.red);
		blue = (Button) findViewById(R.id.blue);
		green = (Button) findViewById(R.id.green);
		bigger = (Button) findViewById(R.id.bigger);
		smaller = (Button) findViewById(R.id.smaller);
		
		bold = (Button) findViewById(R.id.bold);
		itatic = (Button) findViewById(R.id.itatic);
		normal = (Button) findViewById(R.id.normal);
		
		test = (TextView) findViewById(R.id.test);
		// 匿名内部类实现对事件的监听
		red.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				test.setTextColor(Color.RED);
			}
		});
		blue.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				test.setTextColor(Color.BLUE);
			}
		});
		green.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				test.setTextColor(Color.GREEN);
			}
		});
		bigger.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				size = (int) test.getTextSize();
				size += 4;
				if (size >= 72) {
					size = 72;
				}
				test.setTextSize(size);
			}
		});
		smaller.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				size = (int) test.getTextSize();
				size -= 4;
				if (size <= 8) {
					size = 8;
				}
				test.setTextSize(size);
			}
		});
		bold.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				test.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));
			}
		});
		itatic.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				test.setTypeface(Typeface.defaultFromStyle(Typeface.ITALIC));
			}
		});
		normal.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				test.setTypeface(Typeface.defaultFromStyle(Typeface.NORMAL));
			}
		});
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}

五、MainActivity类作为事件监听器

1、新建工程文件

2、布局管理文件和内部类一样(复制上面代码);

3、Strings.xml文件和内部类一样(复制上面代码);

4、MainActivity.java中的代码如下:

package com.example.demo5;

import android.os.Bundle;
import android.app.Activity;
import android.graphics.Color;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity implements OnClickListener {
	private Button red, blue, green, bigger, smaller, bold, itatic, normal;
	private TextView test;
	private int size = 12;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		red = (Button) findViewById(R.id.red);
		blue = (Button) findViewById(R.id.blue);
		green = (Button) findViewById(R.id.green);
		
		bigger = (Button) findViewById(R.id.bigger);
		smaller = (Button) findViewById(R.id.smaller);

		bold = (Button) findViewById(R.id.bold);
		itatic = (Button) findViewById(R.id.itatic);
		normal = (Button) findViewById(R.id.normal);

		test = (TextView) findViewById(R.id.test);

		red.setOnClickListener(this);// 对事件源进行事件监听
		blue.setOnClickListener(this);// 对事件源进行事件监听
		green.setOnClickListener(this);// 对事件源进行事件监听
		bigger.setOnClickListener(this);// 对事件源进行事件监听
		smaller.setOnClickListener(this);// 对事件源进行事件监听
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		switch (v.getId()) {
		case R.id.red:
			test.setTextColor(Color.RED);
			break;
		case R.id.blue:
			test.setTextColor(Color.BLUE);
			break;
		case R.id.green:
			test.setTextColor(Color.GREEN);
			break;
		case R.id.bigger:
			size=(int) test.getTextSize();
			size+=4;
			if(size>48){
				size=48;
			}
			test.setTextSize(size);
			break;
		case R.id.smaller:
			size=(int) test.getTextSize();
			size-=4;
			if(size<8){
				size=8;
			}
			test.setTextSize(size);
			break;
		default:
			break;
		}
	}

}

六、混合使用案例:

1、activity_main中的代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">
 
    <Button
        android:id="@+id/button1"
        android:text="接口方式设置监听器"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
 
    <Button
        android:id="@+id/button2"
        android:text="直接在xml文件中绑定"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="button2OnClick"/>
 
    <Button
        android:id="@+id/button3"
        android:text="使用匿名内部类设置监听器"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
 
    <Button
        android:id="@+id/button4"
        android:text="使用外部类设置监听器"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
 
</LinearLayout>

2、MainActivity中的代码如下:

import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
 
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
 
    private Context context = MainActivity.this;
 
    private Button button1;
    private Button button2;
    private Button button3;
    private Button button4;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        button1 = (Button) findViewById(R.id.button1);
        button2 = (Button) findViewById(R.id.button2);
        button3 = (Button) findViewById(R.id.button3);
        button4 = (Button) findViewById(R.id.button4);
 
        button1.setOnClickListener(this);
 
        button3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(context,"使用匿名内部类实现监听", Toast.LENGTH_SHORT).show();
            }
        });
 
        button4.setOnClickListener(new MyOnClickListener() {
            public void onClick(View view){
                super.onClick(view);
            }
        });
    }
 
    public void button2OnClick(View view){
        Toast.makeText(context,"直接在xml文件中绑定", Toast.LENGTH_SHORT).show();
    }
 
    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.button1:
                Toast.makeText(context,"以接口的方式设置监听器", Toast.LENGTH_SHORT).show();
                break;
        }
    }
 
    class MyOnClickListener implements View.OnClickListener{
 
        @Override
        public void onClick(View view) {
            Toast.makeText(context,"使用外部类设置监听器", Toast.LENGTH_SHORT).show();
        }
    }
}

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值