分享一个圆角自定义的漂亮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


AlertDialog自定义界面圆角有背景问题

final AlertDialog cancleDialog = new AlertDialog.Builder(this).create();                         ca...
  • u014074418
  • u014074418
  • 2016年10月26日 18:25
  • 2099

无系统边框自定义圆角AlertDialog

public static AlertDialog dialog(Context context, String titles, String messages,View.OnClickListene...
  • my_worldlet
  • my_worldlet
  • 2016年11月25日 13:54
  • 1282

自定义AlertDialog(圆角+退出动画+自定义布局)

图片省略了不上传了。。。 首先看activity_main.xml
  • u013210620
  • u013210620
  • 2015年05月09日 01:15
  • 3038

android dialog圆角显示及解决出现的黑色棱角

原文地址:http://blog.csdn.net/jj120522/article/details/7871289 最近在开发一个天气预报的app,看到一个比较不错友情提示,如下:   ...
  • xiahao86
  • xiahao86
  • 2014年06月11日 13:59
  • 7306

如何去掉自定义AlertDialog进行圆角化的时候,出现的阴影或者黑色边角(亲测有效)

这是在自己学习安卓的路上,第一进行将问题进行记录,因为自己遇到这个问题的时候,百度了很多方法,但是都没有达到想要的效果,经过自己很多的努力,最后终于实现了,所以想把这个记录下来,方便自己和更多的人能解...
  • Cs_hnu_scw
  • Cs_hnu_scw
  • 2016年11月13日 10:29
  • 1339

Android 自定义带圆角的dialog

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

自定义圆角Dialog

  • 2010年06月24日 11:36
  • 116KB
  • 下载

AlertDialog自定义样式显示圆角背景失败

在代码中添加代码: Window window = alertDialog.getWindow(); window.setBackgroundDrawable(new ColorDrawable...
  • m0_37678565
  • m0_37678565
  • 2018年01月30日 11:55
  • 9

AlertDialog制作圆角 背景有直角问题

问题: 设置圆角的xml xml version="1.0" encoding="utf-8"?> xmlns:android="http://schemas.android.com/a...
  • epianzhi
  • epianzhi
  • 2017年07月19日 15:50
  • 169

Android实现自定义圆角对话框Dialog

前言:   项目中多处用到对话框,用系统对话框太难看,就自己写一个自定义对话框。         对话框包括:1、圆角         2、app图标 , 提示文本,关闭对话框的"确定"按钮 ...
  • wjr1949
  • wjr1949
  • 2017年06月09日 15:51
  • 299
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:分享一个圆角自定义的漂亮AlertDialog
举报原因:
原因补充:

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