转载:http://www.cnblogs.com/eustoma/p/3937099.html
\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:
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