首页 > 技术文章 > android自定议对话框

vincent-guo 2014-02-24 18:29 原文

1、布局对话框XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="30dp"
    android:layout_marginRight="30dp"
    android:background="#FFFFFFFF"
    android:minWidth="280dp"
    android:orientation="vertical" >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="44dp"
        android:background="#11243b" >

        <TextView
            android:id="@+id/coolc_dialog_title"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center"
            android:text="提醒"
            android:textColor="@android:color/white"
            android:textSize="18sp"
            android:textStyle="bold"
            tools:ignore="HardcodedText" />

        <Button
            android:id="@+id/coolc_dialog_close"
            android:layout_width="25dp"
            android:layout_height="25dp"
            android:layout_alignParentRight="true"
            android:layout_marginRight="10dp"
            android:layout_marginTop="7dp"
            android:background="@drawable/btn_close" />
    </RelativeLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:orientation="vertical" >

        <View
            android:layout_width="match_parent"
            android:layout_height="20dp" />

        <TextView
            android:id="@+id/coolc_dialog_tip"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:textColor="@android:color/black"
            android:textSize="20sp"/>

        <View
            android:layout_width="match_parent"
            android:layout_height="20dp" />

        <Button
            android:id="@+id/coolc_dialog_confirm"
            android:layout_width="100dp"
            android:layout_height="41dp"
            android:background="@drawable/btn_green"
            android:text="确定"
            android:textColor="@android:color/white"
            android:textSize="20sp"
            tools:ignore="HardcodedText" />
    </LinearLayout>

    <View
        android:layout_width="match_parent"
        android:layout_height="20dp" />

</LinearLayout>

2、在values下的styles添加下面格式

 <style name="coolcDialog" parent="android:style/Theme.Dialog">

        <!-- 取消黑色背景,使得弹出对话框为半透明 -->
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowIsFloating">true</item>
    </style>

 

3、创建一个继承Dialog的类

 1 /**
 2  * 自定议对话框
 3  * 
 4  * @author vincent
 5  * 
 6  */
 7 public class CoolCDialog extends Dialog {
 8     private CoolCDialogClickLisener coolCDialogClickLisener;
 9     private CoolCDialog mSelf;
10     private String msg;
11 
12     public CoolCDialogClickLisener getCoolCDialogClickLisener() {
13         return coolCDialogClickLisener;
14     }
15 
16     public void setCoolCDialogClickLisener(
17             CoolCDialogClickLisener coolCDialogClickLisener) {
18         this.coolCDialogClickLisener = coolCDialogClickLisener;
19     }
20 
21     public CoolCDialog(Context context) {
22         super(context);
23         // TODO Auto-generated constructor stub
24         mSelf = this;
25     }
26 
27     public void setMsg(String msg) {
28         this.msg = msg;
29     }
30 
31     public CoolCDialog(Context context, int theme) {
32         super(context, theme);
33         mSelf = this;
34     }
35 
36     @Override
37     protected void onCreate(Bundle savedInstanceState) {
38         // TODO Auto-generated method stub
39         super.onCreate(savedInstanceState);
40         this.setContentView(R.layout.coolc_dialog);
41         this.setCancelable(false);// 不可以用“返回键”取消
42         TextView msgView = (TextView) this.getWindow().findViewById(
43                 R.id.coolc_dialog_tip);
44         msgView.setText(msg);
45         // 查找关闭按钮 设置监听
46         View close = this.getWindow().findViewById(R.id.coolc_dialog_close);
47         close.setOnClickListener(new android.view.View.OnClickListener() {
48             @Override
49             public void onClick(View v) {
50                 mSelf.dismiss();
51             }
52 
53         });
54 
55         // 查找确认按钮 设置监听
56         View comfirm = this.getWindow().findViewById(R.id.coolc_dialog_confirm);
57         comfirm.setOnClickListener(new android.view.View.OnClickListener() {
58             @Override
59             public void onClick(View v) {
60                 mSelf.dismiss();
61                 if (coolCDialogClickLisener != null) {
62                     coolCDialogClickLisener.onClick(v, mSelf);
63                 }
64             }
65 
66         });
67     }
68 
69     public interface CoolCDialogClickLisener {
70 
71         public void onClick(View v, CoolCDialog dialog);
72     }
73 }

 

4、自定义类使用

 1 CoolCDialog mdialog = new CoolCDialog(this, R.style.coolcDialog);
 2             mdialog.setMsg("恭喜您,验证码发送成功。");
 3             mdialog.setCoolCDialogClickLisener(new CoolCDialogClickLisener() {
 4 
 5                 @Override
 6                 public void onClick(View v, CoolCDialog dialog) {
 7                     // TODO Auto-generated method stub
 8                 }
 9             });
10             mdialog.show();

5、效果图

推荐阅读