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

转载: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.
  *
  * Under GPL v3 : http://www.gnu.org/licenses/gpl-3.0.html
  *
  * @author 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


你可能感兴趣的:(android)