1、定义style
<style name="myDialog" parent="android:style/Theme.Dialog">    <item name="android:windowFrame">@null</item>    <!-- 边框 -->    <item name="android:windowIsFloating">true</item>    <!-- 是否浮现在activity之上 -->    <item name="android:windowIsTranslucent">true</item>    <!-- 半透明 -->    <item name="android:windowNoTitle">true</item>    <!-- 无标题 -->    <item name="android:windowBackground">@android:color/transparent</item>    <!-- 背景透明 -->    <item name="android:backgroundDimEnabled">true</item>    <!-- 模糊 --></style>

2、自定义Dialog
/**  * 拍照的dialog  */ public class ImageChooseDialog extends Dialog implements OnClickListener {    private Button choose_album;    private Button choose_cam;    private Button choose_cancel;    public final static int PHOTO_SELETED = 3012;    public final static int PHOTO_SCROP = 3013;    public ImageChooseDialog(Context context) {        super(context, R.style.myDialog);        this.setCancelable(true);        setCustomView();    }    public ImageChooseDialog(Context context, boolean cancelable) {        super(context, R.style.myDialog);        this.setCancelable(cancelable);        setCustomView();    }    public ImageChooseDialog(Context context, int theme) {        super(context, R.style.myDialog);        setCustomView();    }    /**  * 设置整个弹出框的视图  */  private void setCustomView() {        View mView = LayoutInflater.from(getContext()).inflate(                R.layout.choose_avatar, null);        choose_album = (Button) mView.findViewById(R.id.choose_album);        choose_cam = (Button) mView.findViewById(R.id.choose_cam);        choose_cancel = (Button) mView.findViewById(R.id.choose_cancel);        choose_cancel.setOnClickListener(this);        choose_album.setOnClickListener(this);        choose_cam.setOnClickListener(this);        super.setContentView(mView);    }    @Override    public void setContentView(View view) {        // 重写本方法,使外部调用时不可破坏控件的视图。        // 也可以使用本方法改变CustomDialog的内容部分视图,比如让用户把内容视图变成复选框列表,图片等。这需要获取mView视图里的其它控件    }    /**  * 确定键监听器  */  public void setChooseAlbumListener(View.OnClickListener listener) {        choose_album.setOnClickListener(listener);    }    /**  * 取消键监听器  */  public void setChooseCamareListener(View.OnClickListener listener) {        choose_cam.setOnClickListener(listener);    }    @Override    public void onClick(View v) {        switch (v.getId()) {            case R.id.choose_cancel:                dismiss();                break;            case R.id.choose_album:                dismiss();                break;            case R.id.choose_cam:                dismiss();                break;            default:                break;        }    }    /**  * @param activity 打开相机  */  public static void openCamare(Activity activity) {        if (!SDCardFileUtils.avaiableSDCard()) {            AndroidUtils.custToast(activity, "没有检测到存储卡!");            return;        }        Uri imageUri = null;        String fileName = null;        Intent openCameraIntent = new Intent(                MediaStore.ACTION_IMAGE_CAPTURE);        // 删除上一次截图的临时文件        SharedPreferences sharedPreferences = activity.getSharedPreferences("temp",                Context.MODE_PRIVATE);        SDCardFileUtils.deletePhotoAtPathAndName(Environment                        .getExternalStorageDirectory().getAbsolutePath(),                sharedPreferences.getString("tempName", ""));        // 保存本次截图临时文件名字        fileName = String.valueOf(System.currentTimeMillis()) + ".jpg";        SharedPreferences.Editor editor = sharedPreferences.edit();        editor.putString("tempName", fileName);        editor.commit();        imageUri = Uri.fromFile(new File(Environment                .getExternalStorageDirectory(), fileName));        // 指定照片保存路径(SD卡),image.jpg为一个临时文件,每次拍照后这个图片都会被替换        openCameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);        activity.startActivityForResult(openCameraIntent, PHOTO_SELETED);    }    /**  * @param activity 打开图库  */  public static void openAlbum(Activity activity) {        if (!SDCardFileUtils.avaiableSDCard()) {            AndroidUtils.custToast(activity, "没有检测到存储卡!");            return;        }        Intent openAlbumIntent = new Intent(Intent.ACTION_GET_CONTENT);        openAlbumIntent.setDataAndType(                MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");        activity.startActivityForResult(openAlbumIntent, PHOTO_SELETED);    }    /**  * 裁剪图片  *  * @param activity activity  * @param uri 地址  * @param outputX 宽度像素  * @param outputY 高度像素  */  public static void cropImage(Activity activity, Uri uri, int outputX, int outputY) {        Intent intent = new Intent("com.android.camera.action.CROP");        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {            String url = SDCardFileUtils.getPath(activity, uri);            intent.setDataAndType(Uri.fromFile(new File(url)), "image/*");        } else {            intent.setDataAndType(uri, "image/*");        }        // croptrue是设置在开启的intent中设置显示的view可以剪裁        intent.putExtra("crop", "true");        // aspectX aspectY 是宽高的比例        intent.putExtra("aspectX", 1);        intent.putExtra("aspectY", 1);        // outputX,outputY 是剪裁图片的宽高        intent.putExtra("outputX", outputX);        intent.putExtra("outputY", outputY);        intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());        intent.putExtra("noFaceDetection", true);        intent.putExtra("return-data", true);        activity.startActivityForResult(intent, PHOTO_SCROP);    }}
3、自定义XML
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"              android:layout_width="fill_parent"              android:layout_height="wrap_content"              android:minWidth="1000dp"              android:orientation="vertical">    <LinearLayout        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:gravity="center"        android:orientation="vertical"        android:padding="10dp">        <Button            android:id="@+id/choose_album"            android:layout_width="fill_parent"            android:layout_height="45dp"            android:layout_marginTop="5dp"            android:background="@drawable/btn_login_bg"            android:textColor="@color/white"            android:text="本地相册"            android:padding="5dp"            android:textSize="20sp"/>        <Button            android:id="@+id/choose_cam"            android:layout_width="fill_parent"            android:layout_height="45dp"            android:layout_marginTop="5dp"            android:padding="5dp"            android:text="相机拍照"            android:background="@drawable/btn_login_bg"            android:textColor="@color/white"            android:textSize="20sp"/>        <Button            android:id="@+id/choose_cancel"            android:layout_width="fill_parent"            android:layout_height="45dp"            android:padding="5dp"            android:layout_marginTop="5dp"            android:background="@drawable/btn_grey"            android:textColor="@color/white"            android:text="取消"            android:textSize="20sp"/>    </LinearLayout></LinearLayout>
4、调用对话框
/**  * 显示弹窗的dialog  */ public void showImageDialog() {    if (chooseDialog == null) {        chooseDialog = new ImageChooseDialog(context);        chooseDialog.setChooseAlbumListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                chooseDialog.dismiss();                ImageChooseDialog.openAlbum(CheckInActivity.this);            }        });        chooseDialog.setChooseCamareListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                chooseDialog.dismiss();                ImageChooseDialog.openCamare(CheckInActivity.this);            }        });        chooseDialog.show();        Window dialogWindow = chooseDialog.getWindow();        dialogWindow.setGravity(Gravity.BOTTOM);    } else {        if (!chooseDialog.isShowing()) {            chooseDialog.show();        }    }}




更多相关文章

  1. android图片压缩工具类分享
  2. 『ANDROID』Android实现圆形的图片边角
  3. PC客户端与Android实现图片传送
  4. android_常用UI控件_02_EditText_01添加图片到edittext中
  5. Android 图片点击 全屏缩放预览
  6. Android富文本图文混排、粗体、斜体、图片、下划线、删除线等
  7. android调用系统(相机)的图片,并且返回

随机推荐

  1. 17.Android与JavaScript相互调用
  2. Android发展演变与开发环境搭建
  3. Android:(14)ContentProvider数据模型概
  4. Android实现录屏直播(一)ScreenRecorder的
  5. 阿里云OS和Android的"基友“关系
  6. 修改Android Media Scanner的扫描路径
  7. Android 线性布局详解
  8. Android中的Binder详解
  9. 编译Android内核 For nexus 5 以及绕过An
  10. Android 支持不同(本地化、屏幕、版本)设备