分享一个圆角自定义的漂亮AlertDialog

转载 2015年11月17日 23:25:54

转载:http://www.cnblogs.com/eustoma/p/3937099.html

分享一个圆角自定义的漂亮AlertDialog

 

\res\drawable-hdpi\bg_title_custom_dialog.xml:

复制代码
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item><shape>
            <gradient android:angle="270" android:endColor="#e1e1e1" android:startColor="#e1e1e1" />
            <corners android:topLeftRadius="15dp" android:topRightRadius="15dp" />
    </shape></item>
</selector>
复制代码

\res\drawable-hdpi\bg_middle_custom_dialog.xml:

复制代码
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item><shape>
            <gradient android:angle="270" android:endColor="#f5f5f5" android:startColor="#f5f5f5" />
    </shape></item>
</selector>
复制代码

\res\drawable-hdpi\bg_bottom_custom_dialog.xml:

复制代码
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item><shape>
            <gradient android:angle="270" android:endColor="#e1e1e1" android:startColor="#e1e1e1" />
            <corners android:bottomLeftRadius="15dp" android:bottomRightRadius="15dp" />
    </shape></item>
</selector>
复制代码

\res\drawable-hdpi\bbuton_info_rounded.xml:

复制代码
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_pressed="true"><shape>
            <solid android:color="@color/bbutton_info_pressed" />
            <stroke android:width="1dp" android:color="@color/bbutton_info_edge" />
            <corners android:radius="@dimen/bbuton_rounded_corner_radius"/>
        </shape></item>
            
    <item android:state_enabled="false"><shape>
        <solid android:color="@color/bbutton_info_disabled" />
            <stroke android:width="1dp" android:color="@color/bbutton_info_disabled_edge" />
            <corners android:radius="@dimen/bbuton_rounded_corner_radius"/>
        </shape></item>
        
    
    <item><shape>
            <solid android:color="@color/bbutton_info" />
            <stroke android:width="1dp" android:color="@color/bbutton_info_edge" />
            <corners android:radius="@dimen/bbuton_rounded_corner_radius"/>
        </shape></item>

</selector>
复制代码

\res\drawable-hdpi\bbuton_danger_rounded.xml:

复制代码
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_pressed="true"><shape>
            <solid android:color="@color/bbutton_danger_pressed" />
            <stroke android:width="1dp" android:color="@color/bbutton_danger_edge" />
            <corners android:radius="@dimen/bbuton_rounded_corner_radius"/>
        </shape></item>
        
    
    <item android:state_enabled="false"><shape>
        <solid android:color="@color/bbutton_danger_disabled" />
            <stroke android:width="1dp" android:color="@color/bbutton_danger_disabled_edge" />
            <corners android:radius="@dimen/bbuton_rounded_corner_radius"/>
        </shape></item>
        

    <item><shape>
            <solid android:color="@color/bbutton_danger" />
            <stroke android:width="1dp" android:color="@color/bbutton_danger_edge" />
            <corners android:radius="@dimen/bbuton_rounded_corner_radius"/>
        </shape></item>
    
        
</selector>
复制代码

\res\layout\custom_dialog_layout.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="fill_parent"
    android:layout_height="wrap_content"
    android:minWidth="280dip"
    android:orientation="vertical"
    android:background="@null">

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/bg_title_custom_dialog"
        android:paddingTop="10dip"
        android:paddingBottom="10dip"
        android:orientation="horizontal" >
        <ImageView 
            android:layout_width="32dp"
            android:layout_height="32dp"
            android:layout_gravity="center_vertical"
            android:layout_marginLeft="10dip"
            android:src="@drawable/ic_expand"
            android:contentDescription="@string/line"/>
        <TextView
            android:id="@+id/title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_marginLeft="8dip"
            android:textSize="16sp"
            />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/content"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:minHeight="100dip"
        android:background="@drawable/bg_middle_custom_dialog"
        android:orientation="vertical" 
        android:gravity="center">

        <TextView
            android:id="@+id/message"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dip" 
            android:textSize="16sp"
            android:textColor="#FF000000"/>
    </LinearLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingTop="5dip"
        android:paddingBottom="5dip"
        android:paddingLeft="5dip"
        android:paddingRight="5dip"
        android:background="@drawable/bg_bottom_custom_dialog"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/positiveButton"
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:background="@drawable/bbuton_info_rounded"
            android:textColor="@color/bg_white"
            android:layout_weight="1"
            android:singleLine="true" />

        <Button
            android:id="@+id/negativeButton"
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:background="@drawable/bbuton_danger_rounded"
            android:layout_marginLeft="3dip"
            android:textColor="@color/bg_white"
            android:layout_weight="1"
            android:singleLine="true" />
    </LinearLayout>

</LinearLayout>
复制代码

\res\layout\activity_main.xml:

按 Ctrl+C 复制代码
按 Ctrl+C 复制代码

CustomDialog.java:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
package com.example.test;
  
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
  
/**
 *
 * Create custom Dialog windows for your application
 * Custom dialogs rely on custom layouts wich allow you to
 * create and use your own look & feel.
 *
 *
 * <a href="http://my.oschina.net/arthor" target="_blank" rel="nofollow">@author</a> antoine vianey
 *
 */
public class CustomDialog extends Dialog {
  
    public CustomDialog(Context context, int theme) {
        super(context, theme);
    }
  
    public CustomDialog(Context context) {
        super(context);
    }
  
    /**
     * Helper class for creating a custom dialog
     */
    public static class Builder {
  
        private Context context;
        private String title;
        private String message;
        private String positiveButtonText;
        private String negativeButtonText;
        private View contentView;
  
        private DialogInterface.OnClickListener positiveButtonClickListener, negativeButtonClickListener;
  
        public Builder(Context context) {
            this.context = context;
        }
  
        /**
         * Set the Dialog message from String
         * @param title
         * @return
         */
        public Builder setMessage(String message) {
            this.message = message;
            return this;
        }
  
        /**
         * Set the Dialog message from resource
         * @param title
         * @return
         */
        public Builder setMessage(int message) {
            this.message = (String) context.getText(message);
            return this;
        }
  
        /**
         * Set the Dialog title from resource
         * @param title
         * @return
         */
        public Builder setTitle(int title) {
            this.title = (String) context.getText(title);
            return this;
        }
  
        /**
         * Set the Dialog title from String
         * @param title
         * @return
         */
        public Builder setTitle(String title) {
            this.title = title;
            return this;
        }
  
        /**
         * Set a custom content view for the Dialog.
         * If a message is set, the contentView is not
         * added to the Dialog...
         * @param v
         * @return
         */
        public Builder setContentView(View v) {
            this.contentView = v;
            return this;
        }
  
        /**
         * Set the positive button resource and it's listener
         * @param positiveButtonText
         * @param listener
         * @return
         */
        public Builder setPositiveButton(int positiveButtonText, DialogInterface.OnClickListener listener) {
            this.positiveButtonText = (String) context.getText(positiveButtonText);
            this.positiveButtonClickListener = listener;
            return this;
        }
  
        /**
         * Set the positive button text and it's listener
         * @param positiveButtonText
         * @param listener
         * @return
         */
        public Builder setPositiveButton(String positiveButtonText, DialogInterface.OnClickListener listener) {
            this.positiveButtonText = positiveButtonText;
            this.positiveButtonClickListener = listener;
            return this;
        }
  
        /**
         * Set the negative button resource and it's listener
         * @param negativeButtonText
         * @param listener
         * @return
         */
        public Builder setNegativeButton(int negativeButtonText, DialogInterface.OnClickListener listener) {
            this.negativeButtonText = (String) context.getText(negativeButtonText);
            this.negativeButtonClickListener = listener;
            return this;
        }
  
        /**
         * Set the negative button text and it's listener
         * @param negativeButtonText
         * @param listener
         * @return
         */
        public Builder setNegativeButton(String negativeButtonText, DialogInterface.OnClickListener listener) {
            this.negativeButtonText = negativeButtonText;
            this.negativeButtonClickListener = listener;
            return this;
        }
  
        /**
         * Create the custom dialog
         */
        public CustomDialog create() {
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            // instantiate the dialog with the custom Theme
            final CustomDialog dialog = new CustomDialog(context, R.style.Dialog);
            dialog.setCanceledOnTouchOutside(false);
            View layout = inflater.inflate(R.layout.custom_dialog_layout, null);
            dialog.addContentView(layout, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
            // set the dialog title
            ((TextView) layout.findViewById(R.id.title)).setText(title);
            // set the confirm button
            if (positiveButtonText != null) {
                ((Button) layout.findViewById(R.id.positiveButton)).setText(positiveButtonText);
                if (positiveButtonClickListener != null) {
                    ((Button) layout.findViewById(R.id.positiveButton)).setOnClickListener(new View.OnClickListener() {
                                public void onClick(View v) {
                                    positiveButtonClickListener.onClick(Dialog, DialogInterface.BUTTON_POSITIVE);
                                }
                            });
                }
            else {
                // if no confirm button just set the visibility to GONE
                layout.findViewById(R.id.positiveButton).setVisibility(View.GONE);
            }
             
            // set the cancel button
            if (negativeButtonText != null) {
                ((Button) layout.findViewById(R.id.negativeButton)).setText(negativeButtonText);
                if (negativeButtonClickListener != null) {
                    ((Button) layout.findViewById(R.id.negativeButton)).setOnClickListener(new View.OnClickListener() {
                                public void onClick(View v) {
                                    negativeButtonClickListener.onClick(Dialog, DialogInterface.BUTTON_NEGATIVE);
                                }
                            });
                }
            else {
                // if no confirm button just set the visibility to GONE
                layout.findViewById(R.id.negativeButton).setVisibility(View.GONE);
            }
             
            // set the content message
            if (message != null) {
                ((TextView) layout.findViewById(R.id.message)).setText(message);
            else if (contentView != null) {
                // if no message set
                // add the contentView to the dialog body
                ((LinearLayout) layout.findViewById(R.id.content)).removeAllViews();
                ((LinearLayout) layout.findViewById(R.id.content)).addView(contentView, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
            }
            dialog.setContentView(layout);
            return dialog;
        }
  
    }
  
}

  MainActivity.java:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package com.example.test;
 
import android.os.Bundle;
import android.app.Activity;
import android.app.Dialog;
import android.content.DialogInterface;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
 
public class MainActivity extends Activity {
    private CustomDialog dialog;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.button1).setOnClickListener(new OnClickListener(){
 
            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                CustomDialog.Builder customBuilder = new
                        CustomDialog.Builder(MainActivity.this);
                    customBuilder.setTitle("标题")
                        .setMessage("提示内容")
                        .setNegativeButton("取消"new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int which) {
                                 
                            }
                        })
                        .setPositiveButton("确定",
                                new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int which) {
                                dialog.dismiss();
                            }
                        });
                    dialog = customBuilder.create();
                    dialog.show();
            }
             
        });
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
     
}

  

http://www.eoeandroid.com/thread-319801-1-1.html


相关文章推荐

设置dialog圆角

1、创建一个Dialog,传入设置的属性final Dialog dialog = new Dialog(context, R.style.Dialog_FS);//R.style.Dialog_FS...

如何自定义圆角dialog

1.前俩天的项目中,要求写一个圆角的dialog。当时写出来的dialog,四个角老是出现空白部分,经过一番百度,最后确认了一种方法,在博客中做一个记录。 2.下面我就写一个圆角dialog...

Android 自定义带圆角的dialog

由于感觉Android系统自带的dialog样式不是很美观,就自己定义了一个dialog   1.在styles里定义样式         @null         @null   ...
  • AsiaLYF
  • AsiaLYF
  • 2016年03月30日 19:47
  • 2175

Android开发笔记: Android最简单的圆角提示框

1 创建drawable文件 all_radius.xml   圆角值为20dp,背景颜色为box,边框颜色为border,可以自己定义一个颜色 ...
  • taoerit
  • taoerit
  • 2017年10月26日 10:47
  • 55

自定义dialog实现窗口四个直角变为弧形

原文地址:http://blog.csdn.net/zengchao2013/article/details/50722627 首先,在自定义dialog的布局文件中添加:  ...

无系统边框自定义圆角AlertDialog

public static AlertDialog dialog(Context context, String titles, String messages,View.OnClickListene...

好看的 自定义AlertDialog

先来看看效果这就是一个自定义的dialog。 直接上代码:

漂亮动画效果的Dialog--NiftyDialogEffects

http://www.eoeandroid.com/thread-539079-1-1.html 最近老板说产品上Dialog出现方式太生硬了,就查看了下好一点的效果,发现(Nifty Modal W...

Android漂亮的对话框项目sweet-alert-dialog

漂亮的对话框 sweet-alert-dialog 项目地址: https://github.com/pedant/sweet-alert-dialog android原生的dialog太生硬...

Android自定义漂亮的Dialog

很多时候,可能Android默认的几种Dialog对话框已经不能满足我们的需求,我们需要自定义自己的Dialog对话框,包括样式的改变,功能的改变等等。今天,我给出一个Android自定义Dialog...
  • oktears
  • oktears
  • 2013年07月27日 16:40
  • 3185
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:分享一个圆角自定义的漂亮AlertDialog
举报原因:
原因补充:

(最多只允许输入30个字)