package cn.alphabets.light.ui; import android.app.Activity; import android.app.AlertDialog; import android.app.Application; import android.app.Fragment; import android.content.ContentValues; import android.content.DialogInterface; import android.content.Intent; import android.graphics.Color; import android.net.Uri; import android.provider.MediaStore; import android.util.TypedValue; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.widget.FrameLayout; import android.widget.LinearLayout; import android.widget.PopupWindow; import android.widget.TextView; import android.widget.Toast; import cn.alphabets.light.R; import cn.alphabets.light.network.ContextManager; import cn.alphabets.light.util.FileUtil; /** * * Created by lin on 14/12/9. */ public class Dialog { private static Toast toast; public static final int REQUEST_TAKE_PHOTO = 1000; // 用于拍照时保存 public static Uri photoUri; /** * 选择行 */ public interface Click { public void done(int which); } /** * 显示Toast信息 * @param msg 信息内容 */ public static void toast(int msg) { toast(ContextManager.getInstance().getResources().getString(msg)); } public static void toast(String msg) { toast(msg, android.widget.Toast.LENGTH_SHORT); } public static void toast(String msg, int length) { if (toast == null) { Application context = ContextManager.getInstance(); toast = Toast.makeText(context, msg, length); } else { toast.setText(msg); } toast.show(); } /** * 显示确认对话框 * @param context activity * @param msg 信息内容 */ public static void confirm(Activity context, Click listener, int msg) { confirm(context, listener, ContextManager.getInstance().getResources().getString(msg)); } public static void confirm(Activity context, final Click listener, String msg) { AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setMessage(msg); builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { listener.done(which); } }); builder.setNegativeButton("No", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); AlertDialog dialog = builder.create(); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); dialog.show(); } /** * 选择 * @param context * @param listener * @param positive * @param neutral */ public static void choose(final Object context, final Click listener, String title, String positive, String neutral) { Activity activity = context instanceof Fragment ? ((Fragment) context).getActivity() : (Activity) context; AlertDialog.Builder builder = new AlertDialog.Builder(activity); builder.setMessage(title); builder.setPositiveButton(positive, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { listener.done(which); } }); builder.setNeutralButton(neutral, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { listener.done(which); } }); builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { listener.done(which); } }); AlertDialog dialog = builder.create(); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); dialog.show(); } public static int pixel(Activity activity, int dip){ return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP , dip , activity.getResources().getDisplayMetrics()); } /** * 类似与IOS的ActionSheet,多个按钮选择框 * @param context activity or fragment * @param buttons 按钮 * @param listener 按钮事件 */ public static void actionSheet(final Object context, String[] buttons, String cancel, final Click listener) { Activity activity = context instanceof Fragment ? ((Fragment) context).getActivity() : (Activity) context; // 按钮容器 View view = activity.getLayoutInflater().inflate(R.layout.dialog_selector, null); LinearLayout layout = (LinearLayout) view.findViewById(R.id.selector_buttons); // 弹出window final PopupWindow window = new PopupWindow(view, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); window.setFocusable(true); window.setOutsideTouchable(true); // 加上动画并显示 window.setAnimationStyle(R.style.PopupAnimation); window.showAtLocation(activity.getWindow().getDecorView().getRootView(), Gravity.BOTTOM, 0, 0); // 动态添加按钮 for (int i = 0; i < buttons.length; i++) { LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, pixel(activity, 40)); params.setMargins(0, pixel(activity, 8), 0, 0); TextView button = new TextView(activity); button.setLayoutParams(params); button.setGravity(Gravity.CENTER); button.setText(buttons[i]); button.setTextSize(16); button.setBackgroundResource(R.drawable.n_bt_corner); button.setTextColor(activity.getResources().getColor(R.color.blue)); final int which = i; button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (listener != null) { window.dismiss(); listener.done(which); } } }); layout.addView(button); } if (cancel != null) { LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, pixel(activity, 40)); params.setMargins(0, pixel(activity, 8), 0, 0); TextView button = new TextView(activity); button.setLayoutParams(params); button.setGravity(Gravity.CENTER); button.setText(cancel); button.setTextSize(16); button.setBackgroundResource(R.drawable.n_bt_corner); button.setTextColor(Color.GRAY); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (listener != null) { window.dismiss(); listener.done(-1); } } }); layout.addView(button); } // 点击空白区域或者点击取消则将窗口关闭 FrameLayout emptyArea = (FrameLayout) view.findViewById(R.id.selector_area); emptyArea.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { window.dismiss(); } }); } /** * 拍摄或选择照片,调用端需要使用onActivityResult来获取图片 * @param context Activity或Fragment */ public static void takePhoto(final Object context, final int requestCode) { Dialog.actionSheet(context, new String[]{"拍照", "从相册中选"}, "取消", new Dialog.Click() { @Override public void done(int which) { if (which == 0) { ContentValues values = new ContentValues(); Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); photoUri = ContextManager.getInstance().getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, photoUri); intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); if (context instanceof Fragment) { ((Fragment) context).startActivityForResult(intent, requestCode); } if (context instanceof Activity) { ((Activity) context).startActivityForResult(intent, requestCode); } } else if (which == 1) { Intent intent = new Intent(Intent.ACTION_PICK); intent.setType("image/*"); if (context instanceof Fragment) { ((Fragment) context).startActivityForResult(intent, requestCode); } if (context instanceof Activity) { ((Activity) context).startActivityForResult(intent, requestCode); } } } }); } /** * 解析图片,与takePhoto方法配合使用 * @param requestCode requestCode * @param resultCode resultCode * @param data intent * @return 图片路径 */ public static String parsePhoto(int requestCode, int resultCode, Intent data) { if (data == null) { // 拍摄的照片 return FileUtil.getPhotoPath(photoUri, ContextManager.getInstance()); } else { // 从图库选择 return FileUtil.getPhotoLibraryPath(data.getData(), ContextManager.getInstance()); } } }