Android中为按钮添加事件一般有三种方法,这里总结一下,当然其实这完全是java基础内容。

1、内部类:

?

代码片段,双击复制

btn.setOnClickListener(new OnClickListener()

{

public void onClick(View v)

{

...

}

});

这种方法适合只为单个按钮添加事件,当按钮较多的时候,就要重复写onClick()方法,这样不是最佳的在做法。

2、创建独立的类:

?

代码片段,双击复制

btn.setOnClickListener(new MyListener());

class MyListener implements OnClickListener

{

public void onClick(View v)

{

...

}

}

这种做法其实和内部类的做法差不多,一般的做法并不需要单独声明一个类。相反用内部类对类中的隐藏了实现部分。当然这个比内部类好的地方就是能复用。

3、只实现接口

?

代码片段,双击复制

btn.setOnClickListener(listener);

OnClickListener listener = new OnClickListener()

{

public void onClick(View v)

{

...

}

};

这种做法能节省代码,当有多个按钮时,可以同用一个listener,减少了onClick()方法的调用。而只需在onClick()方法里进行判断是哪个按钮就可以了。

?

代码片段,双击复制

btn1 = (Button) findViewById(R.id.btn1);

btn2 = (Button) findViewById(R.id.btn2);

btn1.setOnClickListener(listener);

btn2.setOnClickListener(listener);

OnClickListener listener = new OnClickListener()

{

public void onClick(View v)

{

btn = (Button)v;

switch(btn.getId())

{

case R.id.btn1:

...;

break;

case R.id.btn2:

...;

break;

...

}

}

};

import java.io.File;

import java.text.SimpleDateFormat;

import java.util.Date;

import android.app.Activity;

import android.content.Intent;

import android.database.Cursor;

import android.net.Uri;

import android.os.Bundle;

import android.os.Environment;

import android.provider.MediaStore;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.Toast;

public class ActivityMedia extends Activity  implements OnClickListener {

private static final int RESULT_CAPTURE_IMAGE = 1;// 照相的requestCode

private static final int REQUEST_CODE_TAKE_VIDEO = 2;// 摄像的照相的requestCode

private static final int RESULT_CAPTURE_RECORDER_SOUND = 3;// 录音的requestCode

private String strImgPath = "";// 照片文件绝对路径

private String strVideoPath = "";// 视频文件的绝对路径

private String strRecorderPath = "";// 录音文件的绝对路径

Button buttonShot;

Button buttonVideo;

Button buttonRecorder;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

this.setContentView(R.layout.media);

buttonShot = (Button)findViewById(R.id.ButtonShot);

buttonShot.setOnClickListener(this);

buttonVideo = (Button)findViewById(R.id.ButtonVideo);

buttonVideo.setOnClickListener(this);

buttonRecorder = (Button)findViewById(R.id.ButtonRecorder);

buttonRecorder.setOnClickListener(this);

}

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

switch (requestCode) {

case RESULT_CAPTURE_IMAGE://拍照

if (resultCode == RESULT_OK) {

Toast.makeText(this, strImgPath, Toast.LENGTH_SHORT).show();

}

break;

case REQUEST_CODE_TAKE_VIDEO://拍摄视频

if (resultCode == RESULT_OK) {

Uri uriVideo = data.getData();

Cursor cursor=this.getContentResolver().query(uriVideo, null, null, null, null);

if (cursor.moveToNext()) {

/* _data:文件的绝对路径 ,_display_name:文件名 */

strVideoPath = cursor.getString(cursor.getColumnIndex("_data"));

Toast.makeText(this, strVideoPath, Toast.LENGTH_SHORT).show();

}

}

break;

case RESULT_CAPTURE_RECORDER_SOUND://录音

if (resultCode == RESULT_OK) {

Uri uriRecorder = data.getData();

Cursor cursor=this.getContentResolver().query(uriRecorder, null, null, null, null);

if (cursor.moveToNext()) {

/* _data:文件的绝对路径 ,_display_name:文件名 */

strRecorderPath = cursor.getString(cursor.getColumnIndex("_data"));

Toast.makeText(this, strRecorderPath, Toast.LENGTH_SHORT).show();

}

}

break;

}

}

/**

* 照相功能

*/

private void cameraMethod() {

Intent p_w_picpathCaptureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

strImgPath = Environment.getExternalStorageDirectory().toString() + "/CONSDCGMPIC/";//存放照片的文件夹

String fileName = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + ".jpg";//照片命名

File out = new File(strImgPath);

if (!out.exists()) {

out.mkdirs();

}

out = new File(strImgPath, fileName);

strImgPath = strImgPath + fileName;//该照片的绝对路径

Uri uri = Uri.fromFile(out);

p_w_picpathCaptureIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri);

p_w_picpathCaptureIntent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);

startActivityForResult(p_w_picpathCaptureIntent, RESULT_CAPTURE_IMAGE);

}

/**

* 拍摄视频

*/

private void videoMethod() {

Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);

intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 0);

startActivityForResult(intent, REQUEST_CODE_TAKE_VIDEO);

}

/**

* 录音功能

*/

private void soundRecorderMethod() {

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);

intent.setType("audio/amr");

startActivityForResult(intent, RESULT_CAPTURE_RECORDER_SOUND);

}

/**

* 提示信息

* @param text

* @param duration

*/

private void showToast(String text, int duration) {

Toast.makeText(ActivityMedia.this, text, duration).show();

}

public void onClick(View v) {

int id = v.getId();

switch(id){

case R.id.ButtonShot:

cameraMethod();

break;

case R.id.ButtonVideo:

videoMethod();

break;

case R.id.ButtonRecorder:

soundRecorderMethod();

break;

}

}

}

复制代码

界面布局:

xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent">

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent">

android:id="@+id/ButtonShot"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="拍照"/>

android:id="@+id/ButtonVideo"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="录像"/>

android:id="@+id/ButtonRecorder"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="录音"/>

android 按钮事件添加事件吗,android为按钮添加事件的三种方法相关推荐

  1. 短信备份到另一个手机android,旧手机的短信怎么转移到新手机上?三种方法总有一种适合你...

    手机短信一直以来都是我们和其他对象传输信息的工具,更是存储了大量重要的信息,如果我们更换手机需要保留下来这些短信该怎么办呢?有没有什么方法可以将这些短信转移到新手机中去,或者导出到电脑上进行保管呢. ...

  2. Android项目实战(二):安卓应用程序退出的三种方法

    现在的APP退出的时候都不是让用户点击了"后退键"就退出.防止用户点错了后退键而造成的用户体检不好. 一年前搞的Demo代码不见了,重新写下就当是复习和以后直接拿来用把 目前流行的 ...

  3. 电视android已停止运行是什么意思,智能电视提示应用停止运行,三种方法亲测有效!...

    原标题:智能电视提示应用停止运行,三种方法亲测有效! 智能电视使用时间一长,或者是使用不当总会出现一些问题,当电视机页面出现"某软件"已经停止运行提示的时候,是什么原因导致的?自己 ...

  4. 怎样知道android的手机号码,如何查询自己的手机号码?看完这三种方法,再也不用担心了...

    原标题:如何查询自己的手机号码?看完这三种方法,再也不用担心了 导语:现在智能手机如此盛行的时代,相信很多人有不止一部手机,这样就会出现自己的手机号码记不住的情况,身边经常有朋友遇到过自己的号码也记不 ...

  5. android手机怎么连电视,智能电视怎么连接手机?这三种方法满足你各种需求

    原标题:智能电视怎么连接手机?这三种方法满足你各种需求 现在电视.电脑手机的交互需求越来越强,我们经常会需要将手机连接电视用大屏去展示一些手机或者电脑上的内容,有时是需要展示PPT,有时是想投屏看剧. ...

  6. linux自动点击软件上的按钮有什么用,教会你Linux Shell自动交互的三种方法

    你了解Linux系统么?你是Linux系统的应用者么?如果你要学习linux,你可能会遇到Linux Shell自动交互问题,这里将介绍Linux Shell自动交互的解决方法,在这里拿出来和大家分享 ...

  7. 【Android开发】三种方法实现Button点击事件响应

    目录 1.在xml中对onclick()进行指定方法 2.NEW一个OnClickListenner()接口实现 3.实现OnClickListener接口(Switch方法) Hello,你好呀,我 ...

  8. Framework事件机制—Android事件处理的三种方法

    1.1.背景 Android的事件处理的三种方法: 1.基于监听的事件处理机制 setOnClickListener,setOnLongClickListener.setOnTouchListener ...

  9. android 存放音频文件夹里,Android 实现简单的音乐播放器效果(音频文件的三种存放)...

    Android 实现简单的音乐播放器效果(音频文件的三种存放).三种方法主要使用到的类 MediaPlayer.create() getAssets() new Mediaplayer() - 几个控 ...

  10. android全局计时_Android中使用定时器的三种方法

    本文实例为大家分享了Android中使用定时器的三种方法,供大家参考,具体内容如下 图示: 因为都比较简单,所以就直接贴代码(虑去再次点击停止的操作),有个全局的Handler负责接收消息更新UI 第 ...

最新文章

  1. Mac OS X 创新卡关三年,唯一看得出版本不同之处是「预设桌布」
  2. 轻松搞懂sscanf和sprintf
  3. Leecode01. 两数之和——Leecode大厂热题100道系列
  4. 推荐一款生成SQL插入语句的软件
  5. 解决夜神模拟器无法联机调试 adb server version (**) doesn't match this client (**); killing...
  6. linux c之通过管道父子进程实现同步通信
  7. (转)tomcat配置访问项目时不需要加项目名称
  8. qt mingw连接mysql_win下Qt连接MySql (mingw)
  9. atitit.为什么技术的选择方法java超过.net有前途
  10. 电脑计算机里怎么找恢复出厂设置,普通电脑怎么恢复出厂设置
  11. 狂砸250多亿!亚马逊花了7年时间,造了一个让你自愿加班到死的办公室!
  12. golang,break跳出循环的例子以及随机数生成
  13. 立根铸魂,麒麟信安携手欧拉共推操作系统产业新发展
  14. android输入法横向,Android 手机拼音输入法横向全评
  15. autoCAD2014安装激活
  16. TortoiseSVN简明教程
  17. Ubuntu18.04使用Xorg创建虚拟屏幕
  18. 编译型语言和解释型语言的区别总结
  19. Request processing failed; nested exception is org.thymeleaf.exceptions.TemplateInputException
  20. c语言中:=和==的区别是什么?

热门文章

  1. 解决SSM项目下静态资源(img、js、css)无法引用的问题
  2. 电商知识图谱的构建及搜索推荐场景下的应用实践
  3. 推荐系统系列教程之十五:一网打尽协同过滤、矩阵分解和线性模型
  4. 一文弄懂Pytorch的DataLoader, DataSet, Sampler之间的关系
  5. 重磅福利!程序员面试——算法工程师面试大全第六部分
  6. bigdecimal 科学计数转普通计数_通用计数器的应用价值
  7. java实体null值显示_java反射实现前端接收实体对象,去除“null”字符串(示例代码)...
  8. 如何通过Facebook幻灯片广告让销售量疯涨
  9. 吴恩达《机器学习》第六章:逻辑回归
  10. 数学建模-4.拟合算法