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;
...
}
}
};

Android拍照、录像、录音代码范例

  • <p>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;</p><p>public class ActivityMedia extends Activityimplements 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 imageCaptureIntent = 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);
  • imageCaptureIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
  • imageCaptureIntent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
  • startActivityForResult(imageCaptureIntent, 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();
  • }</p><p> 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;
  • }
  • }
  • }</p>


复制代码
界面布局:

  • <?xml version="1.0" encoding="utf-8"?>
  • <ScrollView
  • xmlns:android="http://schemas.android.com/apk/res/android"
  • android:layout_width="fill_parent"
  • android:layout_height="fill_parent">
  • <LinearLayout
  • android:orientation="vertical"
  • android:layout_width="fill_parent"
  • android:layout_height="fill_parent">
  • <Button
  • android:id="@+id/ButtonShot"
  • android:layout_width="fill_parent"
  • android:layout_height="wrap_content"
  • android:text="拍照"/>
  • <Button
  • android:id="@+id/ButtonVideo"
  • android:layout_width="fill_parent"
  • android:layout_height="wrap_content"
  • android:text="录像"/>
  • <Button
  • android:id="@+id/ButtonRecorder"
  • android:layout_width="fill_parent"
  • android:layout_height="wrap_content"
  • android:text="录音"/>
  • </LinearLayout>
  • </ScrollView>

更多相关文章

  1. 实现TextView的垂直滚动以及通过代码设置TextView滚动无法显示滚
  2. Android Studio使用XML样式在JAVA代码中的使用(使用java代码调节x
  3. Android实现代码画虚线边框背景效果
  4. 一行代码搞定三级缓存
  5. Android代码混淆-添加了Gson遇到的问题
  6. Android实现自定义dialog的代码
  7. java代码控制layout_Margin参数
  8. Android 的 dex2jar 和 jd-gui 反编译 apk 源代码
  9. Android Menu详解及示例代码

随机推荐

  1. Android(安卓)通过AudioTrack播放CAF音频
  2. Android:证书生成与应用
  3. 获取Android设备电池信息
  4. android基本架构
  5. Android(安卓)Activity间的过渡动画
  6. android之发送短信的方法研究
  7. Android(安卓)SDK Manager无法更新的解决
  8. Android(安卓)开发环境入门
  9. Android中文API(131) —— GpsStatus
  10. 关于android 多媒体数据库