Android中自定义弹窗提醒控件

    Android中原生的Dialog弹窗提醒控件样式单一,有时候并不能满足我们的项目需求,而且一个工程里面有时候会在多处都用到弹窗提醒的功能,代码会出现大量的冗余,工作之余,就自己实现了这么一个弹窗提醒控件。自定义控件继承自我们的Dialog,样式自定义,弹窗中的文字可通过数组参数初始化,Item个数实现了动态添加,和数组长度一致。对话框底端可展示一个Item(如:确定)或两个Item(如:确定   取消),通过参数设置。废话不多说,直接上代码:

1、自定义对话框的背景样式,在res/values/styles.xml文件中定义如下样式:

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

2、自定义控件,继承Dialog:

package com.example.mymenudialog.UI;

import java.util.ArrayList;

import android.app.Dialog;
import android.content.Context;
import android.graphics.Color;
import android.util.DisplayMetrics;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.view.Window;
import android.view.WindowManager;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.example.mymenudialog.R;

/**
 * @author sunbr 2015.7.16
 */
public class MyMenuDialog extends Dialog {

	private static Context mContext;
	/** 对话框的宽度 */
	private int dialogWidth;
	/** 是否设置对话框的最后一行为两个Item(如:确定和取消) */
	private boolean isTwoItemsOnLastLine = false;
	/** 是否为倒数第二个Item设置了点击监听事件(只在最后一行显示为两个Item时可用) */
	private boolean isSetOnClickListener2SecondLastItem = false;
	/** 是否为最后一个Item设置了点击监听事件 */
	private boolean isSetOnClickListener2LastItem = false;
	/** 存放所有Item中的文本信息,文本顺序为从上至下,从左至右 */
	private ArrayList<TextView> mList = new ArrayList<TextView>();
	/** 存放所有的分割线,分割线顺序为从上至下,从左至右 */
	private ArrayList<TextView> mDividerList = new ArrayList<TextView>();

	/**
	 * 自定义对话框的构造方法,将根据names中存放的文本从上至下依次创建Item,每个Item中的文本信息为对应names索引位置的值
	 * 
	 * @param context
	 * @param names
	 *            --每条展示的文本信息组成的数组
	 */
	public MyMenuDialog(Context context, String[] names) {
		this(context, names, false);
	}

	/**
	 * 自定义对话框的构造方法,将根据names中存放的文本从上至下依次创建Item,每个Item中的文本信息为对应names索引位置的值
	 * 
	 * @param context
	 * @param names
	 *            --每条展示的文本信息组成的数组
	 * @param isLastLine2Items
	 *            --为true时,最后一行将展示为两个Item横向并列的视图(如:一个"确定"和一个"取消");为false时,每行展示一个Item,顺序为从上至下
	 */
	public MyMenuDialog(Context context, String[] names, boolean isLastLine2Items) {
		super(context, R.style.alertdialog_theme);
		this.isTwoItemsOnLastLine = isLastLine2Items;
		if (null == context || null == names || names.length < 1) {
			return;
		}
		mContext = context;
		Window w = getWindow();
		WindowManager wmManager = w.getWindowManager();
		DisplayMetrics outMetrics = new DisplayMetrics();
		wmManager.getDefaultDisplay().getMetrics(outMetrics);
		dialogWidth = outMetrics.widthPixels * 3 / 4;
		int padding = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 15, outMetrics);
		int height1dp = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 1, outMetrics);
		outMetrics = null;
		TextView contentView, dividerView;
		// 定义根部局控件
		LinearLayout mView = new LinearLayout(context);
		mView.setBackgroundResource(R.drawable.rectangle_shape);
		mView.setOrientation(LinearLayout.VERTICAL);
		// 向根部局文件中添加子控件
		for (int i = 0; i < names.length; i++) {
			contentView = new TextView(mContext);
			dividerView = new TextView(mCon
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值