android为按钮添加事件的三种方法
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>
更多相关文章
- 实现TextView的垂直滚动以及通过代码设置TextView滚动无法显示滚
- Android Studio使用XML样式在JAVA代码中的使用(使用java代码调节x
- Android实现代码画虚线边框背景效果
- 一行代码搞定三级缓存
- Android代码混淆-添加了Gson遇到的问题
- Android实现自定义dialog的代码
- java代码控制layout_Margin参数
- Android 的 dex2jar 和 jd-gui 反编译 apk 源代码
- Android Menu详解及示例代码