自定义Dialog 去黑底

先看效果图


先自定义一个dialog

public class CustomDialog extends Dialog{

	 public CustomDialog(Context context, int theme) {
		super(context, theme);
		// TODO Auto-generated constructor stub
	}
	 public CustomDialog(Context context) {
		// TODO Auto-generated constructor stub
		 super(context);
	}

	/**
     * Helper class for creating a custom dialog
     */
    public static class Builder {
        private Context context;
        private String title; // 对话框标题
        private String message; // 对话框内容
        private String backButtonText; // 对话框返回按钮文本
        private String confirmButtonText; // 对话框确定文本
        private View contentView;
 
        // 对话框按钮监听事件
        private DialogInterface.OnClickListener 
                        backButtonClickListener,
                        confirmButtonClickListener;
 
        public Builder(Context context) {
            this.context = context;
        }
 
        /**
         * 使用字符串设置对话框消息
         * @param title
         * @return
         */
        public Builder setMessage(String message) {
            this.message = message;
            return this;
        }
 
        /**
         * 使用资源设置对话框消息
         * @param title
         * @return
         */
        public Builder setMessage(int message) {
            this.message = (String) context.getText(message);
            return this;
        }
 
        /**
         * 使用资源设置对话框标题信息
         * @param title
         * @return
         */
        public Builder setTitle(int title) {
            this.title = (String) context.getText(title);
            return this;
        }
 
        /**
         * 使用字符串设置对话框标题信息
         * @param title
         * @return
         */
        public Builder setTitle(String title) {
            this.title = title;
            return this;
        }
 
        /**
         * 设置自定义的对话框内容
         * @param v
         * @return
         */
        public Builder setContentView(View v) {
            this.contentView = v;
            return this;
        }
 
        /**
         * 设置back按钮的事件和文本
         * @param backButtonText
         * @param listener
         * @return
         */
        public Builder setBackButton(int backButtonText, DialogInterface.OnClickListener listener) {
            this.backButtonText = (String)context.getText(backButtonText);
            this.backButtonClickListener = listener;
            return this;
        }
 
        /**
         * 设置back按钮的事件和文本
         * @param backButtonText
         * @param listener
         * @return
         */
        public Builder setBackButton(String backButtonText, DialogInterface.OnClickListener listener) {
            this.backButtonText = backButtonText;
            this.backButtonClickListener = listener;
            return this;
        }
 
        /**
         * 设置确定按钮事件和文本
         * @param confirmButtonText
         * @param listener
         * @return
         */
        public Builder setConfirmButton(int confirmButtonText, DialogInterface.OnClickListener listener) {
            this.confirmButtonText = (String)context.getText(confirmButtonText);
            this.confirmButtonClickListener = listener;
            return this;
        }
 
        /**
         * 设置确定按钮事件和文本
         * @param negativeButtonText
         * @param listener
         * @return
         */
        public Builder setConfirmButton(String confirmButtonText, DialogInterface.OnClickListener listener) {
        	 this.confirmButtonText = confirmButtonText;
             this.confirmButtonClickListener = listener;
             return this;
        }
 
        
        /**
         * 创建自定义的对话框
         */
        public CustomDialog create() {
            LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            
            // 实例化自定义的对话框主题
            final CustomDialog dialog = new CustomDialog(context, R.style.CustomDialog);
            View layout = inflater.inflate(R.layout.deleteorderdialog, null);
            dialog.addContentView(layout, 
            		new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
            
            // 设置对话框标题
            ((TextView) layout.findViewById(R.id.title)).setText(title);
            
			// 设置对话框内容
			if (message != null) {
				TextView dlgMsg = (TextView)layout.findViewById(R.id.message);
				dlgMsg.setText(message);
			} else if (contentView != null) {
				// if no message set
				// 如果没有设置对话框内容,添加contentView到对话框主体
				((LinearLayout) layout.findViewById(R.id.content_message)).removeAllViews();
				((LinearLayout) layout.findViewById(R.id.content_message)).addView(
					contentView, new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
			}
			
			// 设置返回按钮事件和文本
			if (backButtonText != null) {
				Button bckButton = ((Button) layout.findViewById(R.id.positiveButton));
				bckButton.setText(backButtonText);
				
				if (backButtonClickListener != null) {
					bckButton.setOnClickListener(new View.OnClickListener() {
						public void onClick(View v) {
							backButtonClickListener.onClick(dialog, DialogInterface.BUTTON_NEGATIVE);
						}
					});
				}
			} else {
				layout.findViewById(R.id.positiveButton).setVisibility(View.GONE);
			}
            
			// 设置确定按钮事件和文本
			if (confirmButtonText != null) {
				Button cfmButton = ((Button) layout.findViewById(R.id.negativeButton));
				cfmButton.setText(confirmButtonText);
				
				if (confirmButtonClickListener != null) {
					cfmButton.setOnClickListener(new View.OnClickListener() {
						public void onClick(View v) {
							confirmButtonClickListener.onClick(dialog, DialogInterface.BUTTON_POSITIVE);
						}
					});
				}
			} else {
				layout.findViewById(R.id.negativeButton).setVisibility(View.GONE);
			}
            
            dialog.setContentView(layout);
            
            return dialog;
        }
 
    }
}

布局代码:  根节点 LinearLayout 的宽度设置为 fill_parent 而最小的宽度是 280dip ,因此对话框的宽度将始终为屏幕宽度的 87.5%

</pre><p><pre name="code" class="html"><?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="280dip"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"
        android:gravity="center"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/title"
            style="@style/DialogText.Title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/content_message"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/message"
            style="@style/DialogText"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:padding="5dip" />
    </LinearLayout>
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="1dp"
        android:background="@color/graywhite" />
	<!--
	<View
        android:layout_width="fill_parent"
        android:layout_height="1dp"
        android:background="@color/graywhite" /> 
	如果用view去填充 将会把整个屏幕占满,这一个问题纠结了我很久 -->
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/positiveButton"
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:layout_marginTop="3dip"
            android:layout_weight="1"
            android:background="@null"
            android:minHeight="40dp"
            android:singleLine="true"
            android:textSize="12dp" />

        <View
            android:layout_width="1dp"
            android:layout_height="match_parent"
            android:background="@color/graywhite" />

        <Button
            android:id="@+id/negativeButton"
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:layout_marginTop="3dip"
            android:layout_weight="1"
            android:background="@null"
            android:minHeight="40dp"
            android:singleLine="true"
            android:textSize="12dp" />
    </LinearLayout>

</LinearLayout>


 自定义Style: 
<!-- 定义对话框样式 -->
	<style name="CustomDialog" parent="android:Theme.Dialog">
		<item name="android:windowFrame">@null</item>
		<item name="android:windowIsFloating">true</item>
		<item name="android:windowIsTranslucent">true</item>
		<item name="android:windowNoTitle">true</item>
		<item name="android:background">@drawable/dialogshape</item>
		<item name="android:windowBackground">@android:color/transparent</item>
		<item name="android:backgroundDimEnabled">true</item>
		<item name="android:backgroundDimAmount">0.6</item>
    </style>
    
	<style name="DialogText">
        <item name="android:textColor">#FF000000</item>
        <item name="android:textSize">12sp</item>
    </style>

    <style name="DialogText.Title">
        <item name="android:textSize">16sp</item>
    </style>
最后如何使用:

CustomDialog.Builder customDialog = new CustomDialog.Builder(getActivity());
			customDialog.setTitle("友情提醒").setMessage("真的要清空购物车吗?").setBackButton("取消", new DialogInterface.OnClickListener(){
				@Override
				public void onClick(DialogInterface dialog, int which) {
					// TODO Auto-generated method stub
					dialog.dismiss();
				}
				
			}).setConfirmButton("确定", new DialogInterface.OnClickListener(){
				@Override
				public void onClick(DialogInterface dialog, int which) {
					// TODO Auto-generated method stub
					shoppingAdapter.celarData();
					dialog.dismiss();
				}
                        }).create().show();
好了,完成了。

CSDN排版好像有点乱。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值