您的位置:首页 > 其它

自定义对话框组件

2012-12-14 16:25 337 查看
很简单的一个的东西,写了两天,才搞出来,真心汗。想想整整7个月没看一眼代码。突然回来工作,很不适应,脑子里也不知道该怎么下手了。


package com.closedialog;

import java.util.ArrayList;
import java.util.List;

import android.app.Dialog;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.text.method.ScrollingMovementMethod;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;

import com.testdlg.R;

public class DialogFactory {

	private Context context;
	private Dialog dialog;
	private boolean isFold = false;

	public DialogFactory(Context context) {
		this.context = context;
	}

	/**
	 * 查询所有支持分享的引用
	 * 
	 * @param context
	 * @return
	 */
	private List<ResolveInfo> getShareApps(Context context) {
		List<ResolveInfo> mApps = new ArrayList<ResolveInfo>();
		Intent intent = new Intent(Intent.ACTION_SEND, null);
		intent.addCategory(Intent.CATEGORY_DEFAULT);
		intent.setType("text/plain");
		PackageManager pManager = context.getPackageManager();
		mApps = pManager.queryIntentActivities(intent, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT);
		return mApps;
	}

	/**
	 * 得到应用列表
	 * 
	 * @return
	 */
	private List<AppInfo> getShareAppList() {
		List<AppInfo> shareAppInfos = new ArrayList<AppInfo>();
		PackageManager packageManager = context.getPackageManager();
		List<ResolveInfo> resolveInfos = getShareApps(context);
		if (null == resolveInfos) {
			return null;
		} else {
			for (ResolveInfo resolveInfo : resolveInfos) {
				AppInfo appInfo = new AppInfo();
				appInfo.setAppPkgName(resolveInfo.activityInfo.packageName);
				appInfo.setAppLauncherClassName(resolveInfo.activityInfo.name);
				appInfo.setAppName(resolveInfo.loadLabel(packageManager).toString());
				appInfo.setAppIcon(resolveInfo.loadIcon(packageManager));
				shareAppInfos.add(appInfo);
				Log.v("TAG", "appInfo.getAppName()" + appInfo.getAppName());
			}
		}
		return shareAppInfos;
	}

	/**
	 * 分享对话框
	 * @param downUrl
	 * 		下载地址
	 * 
	 */
	public void showDialogShare(final String downUrl) {
		dialog = new Dialog(context, R.style.dialog);
		dialog.setContentView(R.layout.dialog_factory_share);

		ListView listView = (ListView) dialog.findViewById(R.id.list_share);
		final ShareCustomAdapter adapter = new ShareCustomAdapter(getShareAppList(), context);
		listView.setAdapter(adapter);
		listView.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
				Intent shareIntent = new Intent(Intent.ACTION_SEND);
				AppInfo app = getShareAppList().get(position);
				shareIntent.setComponent(new ComponentName(app.getAppPkgName(), app.getAppLauncherClassName()));
				shareIntent.setType("text/plain");
				shareIntent.putExtra(Intent.EXTRA_TEXT, downUrl);
				shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
				context.startActivity(shareIntent);
				dialog.dismiss();
			}
		});

		Button btn_close = (Button) dialog.findViewById(R.id.btn_dialog_close);
		btn_close.setOnClickListener(new Button.OnClickListener() {
			@Override
			public void onClick(View v) {
				dialog.dismiss();
			}
		});
		dialog.show();
	}

	/**
	 * 
	 * @param priceBytime
	 *            按次购买价格
	 * @param priceByMonth
	 *            包月价格
	 * @param timeRemain
	 *            按次购买提醒内容
	 * @param monthRemain
	 *            包月购买提醒内容
	 * @param orderRemain
	 *            订购提示
	 * @param onClickListener
	 *            点击事件
	 */
	public void showDialogOrder(String priceBytime, String priceByMonth, String timeRemain, String monthRemain, String orderRemain, final BtnClickListener onClickListener) {
		dialog = new Dialog(context, R.style.dialog);
		dialog.setContentView(R.layout.dialog_factory_order);

		TextView tv_ordorByTime = (TextView) dialog.findViewById(R.id.tv_orderByTime);
		if (priceBytime != null) {
			tv_ordorByTime.setText(priceBytime);
		}
		tv_ordorByTime.setText("按次:" + priceBytime + "元");
		// 按次订购按钮
		Button btn_orderByTime = (Button) dialog.findViewById(R.id.btn_orderByTime);
		btn_orderByTime.setOnClickListener(new Button.OnClickListener() {

			@Override
			public void onClick(View v) {
				if (onClickListener != null) {
					onClickListener.btnOrderByTime(v);
				}
			}
		});

		TextView tv_orderByMonth = (TextView) dialog.findViewById(R.id.tv_orderByMonth);
		if (priceByMonth != null) {
			tv_orderByMonth.setText("包月:" + priceByMonth + "元(天翼视讯全能看)");
		}
		// 包月订购按钮
		Button btn_ordrByMonth = (Button) dialog.findViewById(R.id.btn_orderByMonth);
		btn_ordrByMonth.setOnClickListener(new Button.OnClickListener() {

			@Override
			public void onClick(View v) {
				if (onClickListener != null) {
					onClickListener.btnOrderByMonth(v);
				}
			}
		});

		TextView tv_remain_time = (TextView) dialog.findViewById(R.id.tv_remain_time);
		if (timeRemain != null || "".equals(timeRemain)) {
			tv_remain_time.setText(timeRemain);
		} else {
			LinearLayout ll = (LinearLayout) dialog.findViewById(R.id.ll_orderByTime);
			View view = dialog.findViewById(R.id.view_line_3);
			ll.setVisibility(View.GONE);
			view.setVisibility(View.GONE);
		}

		TextView tv_remain_month = (TextView) dialog.findViewById(R.id.tv_remain_month);
		if (monthRemain != null || "".equals(monthRemain)) {
			tv_remain_month.setText(monthRemain);
		} else {
			LinearLayout ll = (LinearLayout) dialog.findViewById(R.id.ll_orderByMonth);
			View view = dialog.findViewById(R.id.view_line_4);
			ll.setVisibility(View.GONE);
			view.setVisibility(View.GONE);
		}
		final TextView tv_remain_content = (TextView) dialog.findViewById(R.id.tv_remain_content);

		final Button btn_fold = (Button) dialog.findViewById(R.id.btn_fold);
		btn_fold.setOnClickListener(new Button.OnClickListener() {

			@Override
			public void onClick(View v) {
				if (!isFold) {
					isFold = true;
					tv_remain_content.setVisibility(View.VISIBLE);
					btn_fold.setBackgroundResource(R.drawable.btn02_open);
				} else {
					isFold = false;
					tv_remain_content.setVisibility(View.GONE);
					btn_fold.setBackgroundResource(R.drawable.btn02_close);
				}
			}
		});

		TextView tv_remain_conten_TextView = (TextView) dialog.findViewById(R.id.tv_remain_content);
		tv_remain_conten_TextView.setMovementMethod(new ScrollingMovementMethod());
		if (orderRemain != null) {
			tv_remain_conten_TextView.setText(orderRemain);
		}
		// 关闭按钮
		Button btn_close = (Button) dialog.findViewById(R.id.btn_close);
		btn_close.setOnClickListener(new Button.OnClickListener() {

			@Override
			public void onClick(View v) {
				if (onClickListener != null)
					onClickListener.btnCloseClickListener(v);
				dialog.dismiss();

			}
		});
		dialog.show();
	}

	/**
	 * 一个按钮
	 * 
	 * @param title
	 *            标题
	 * @param content
	 *            提示内容
	 * @param okContent
	 *            dialog左边按钮内容
	 * @param onClickListener
	 * @param isCancelable
	 */
	public void showDialog(String title, String content, String okContent, final BtnClickListener onClickListener, boolean isCancelable) {
		showDialog3Btn(title, content, okContent, null, null, onClickListener, isCancelable);
	}

	/**
	 * 2个按钮
	 * 
	 * @param title
	 *            标题
	 * @param content
	 *            提示内容
	 * @param okContent
	 *            dialog左边按钮内容
	 * @param cancleContent
	 *            dialog右边按钮内容
	 * @param onClickListener
	 *            点击事件
	 * @param isCancelable
	 *            能否被返回键取消
	 */
	public void showDialog2Btn(String title, String content, String okContent, String cancleContent, final BtnClickListener onClickListener, boolean isCancelable) {
		showDialog3Btn(title, content, okContent, null, cancleContent, onClickListener, isCancelable);
	}

	/**
	 * 3个按钮
	 * 
	 * @param title
	 *            提示标题
	 * @param content
	 *            提示内容
	 * @param okContent
	 *            dialog左边确定按钮文字
	 * @param selDefingContent
	 *            dialog中间自定义按钮文字
	 * @param cancleContent
	 *            dialog右边取消按钮文字
	 * @param onClickListener
	 *            点击事件
	 * @param isCancelable
	 *            能否响应返回键
	 */
	public void showDialog3Btn(String title, String content, String okContent, String selDefingContent, String cancleContent, final BtnClickListener onClickListener, boolean isCancelable) {
		dialog = new Dialog(context, R.style.dialog);
		dialog.setCancelable(isCancelable);
		dialog.setContentView(R.layout.dialog_factory_1_button);
		Button btnOpt = (Button) dialog.findViewById(R.id.dialog_factory_bt_opt);
		Button btnCancel = (Button) dialog.findViewById(R.id.dialog_factory_bt_close);

		Button btnSeldefine = (Button) dialog.findViewById(R.id.dialog_factory_bt_ok);
		btnSeldefine.setVisibility(View.VISIBLE);
		Button btn_bottom_cancle = (Button) dialog.findViewById(R.id.dialog_factory_bt_cancle);
		btn_bottom_cancle.setVisibility(View.VISIBLE);

		TextView tvContent = (TextView) dialog.findViewById(R.id.dialog_factory_tv_content);
		tvContent.setMovementMethod(new ScrollingMovementMethod());
		TextView tvTitle = (TextView) dialog.findViewById(R.id.dialog_factory_tv_title);

		tvTitle.setText((null == title) ? "" : title);
		if (content.length() > 19) {
			tvContent.setTextSize(22);
		}
		if (tvContent != null) {
			tvContent.setText((null == content) ? "" : content);
		}
		if (okContent != null) {
			btnOpt.setText(okContent);
		}
		if (selDefingContent != null) {
			btnSeldefine.setText(selDefingContent);
		} else {
			btnSeldefine.setVisibility(View.GONE);
		}
		if (cancleContent != null) {
			btn_bottom_cancle.setText(cancleContent);
		} else {
			btn_bottom_cancle.setVisibility(View.GONE);
		}

		btnOpt.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				if (onClickListener != null)
					onClickListener.btnOKOnClickListener(v);
				dialog.dismiss();
			}
		});
		if (selDefingContent != null) {
			btnSeldefine.setOnClickListener(new OnClickListener() {
				public void onClick(View v) {
					if (onClickListener != null)
						onClickListener.btnOKOnClickListener(v);
					dialog.dismiss();
				}
			});
		}

		if (cancleContent != null) {
			btn_bottom_cancle.setOnClickListener(new OnClickListener() {
				public void onClick(View v) {
					if (onClickListener != null)
						onClickListener.btnOKOnClickListener(v);
					dialog.dismiss();
				}
			});
		}

		btnCancel.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				if (onClickListener != null)
					onClickListener.btnCloseClickListener(v);
				dialog.dismiss();
			}
		});

		dialog.show();

	}

	public interface BtnClickListener {
		/**
		 * 确认按钮
		 * 
		 * @param v
		 */
		public abstract void btnOKOnClickListener(View v);

		/**
		 * dialog中间自定义按钮
		 * 
		 * @param v
		 */
		public abstract void btnSelfdefineClickListener(View v);

		/**
		 * dialog最右边按钮
		 * 
		 * @param v
		 */
		public abstract void btnCancleClickListener(View v);

		/**
		 * 右上角关闭
		 * 
		 * @param v
		 */
		public abstract void btnCloseClickListener(View v);

		/**
		 * 按次购买
		 * 
		 * @param v
		 */
		public abstract void btnOrderByTime(View v);

		/**
		 * 包月购买
		 * 
		 * @param v
		 */
		public abstract void btnOrderByMonth(View v);
	}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: