在进行android项目中需要用到对话框,但是由于系统自带的对话框样式不能很好的和你的项目融合,于是就需要用到自定义对话框了。自定义对话框能提高应用的档次。效果图如下:

具体怎么实现我不细说了,直接把源码粘贴出来。源码如下:
my_dialog.xml布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="
https://schemas.android.com/apk/res/android
"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:minWidth="280dip"
android:background="#FFFFFFFF">
<TextView
android:id="@+id/dialog_title"
android:layout_width="fill_parent"
android:layout_height="40.0dip"
android:gravity="center_vertical"
android:paddingLeft="10.0dip"
android:text="@string/dialog_title"
android:textSize="20dip"
android:textStyle="bold"
android:textColor="#0087CB"/>
<ImageView
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:background="@drawable/dialog_sparator"/>
<LinearLayout
android:id="@+id/dialog_content"
android:orientation="vertical"
android:layout_height="wrap_content"
android:layout_width="fill_parent">
<TextView
android:id="@+id/dialog_message"
android:layout_width="fill_parent"
android:layout_height="50.0dip"
android:gravity="center_vertical"
android:paddingLeft="10dip"
android:text="@string/dialog_msg"
android:textSize="20dip"
android:textStyle="bold"
android:textColor="#707070"/>
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="50.0dip"
android:layout_alignParentTop="true"
android:gravity="center">
<Button
android:id="@+id/dialog_back"
android:layout_width="120dip"
android:layout_height="wrap_content"
android:layout_marginRight="5dip"
android:text="@string/dialog_back"
android:textSize="20dip"
android:textColor="#ffffff"
android:textStyle="bold"
android:background="@drawable/dlg_bckbtn_selector"/>
<Button
android:id="@+id/dialog_confirm"
android:layout_width="120dip"
android:layout_height="wrap_content"
android:layout_marginLeft="5dip"
android:text="@string/dialog_exit"
android:textSize="20dip"
android:textColor="#ffffff"
android:textStyle="bold"
android:background="@drawable/dlg_cfgrmbtn_selector"/>
</LinearLayout>
</LinearLayout> 定义Dialog的样式(主题):
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- 定义对话框样式 -->
<style name="Dialog" parent="android:style/Theme.Dialog">
<item name="android:windowBackground">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
</style>
</resources> 自定义Dialog的Java代码:
Java代码
package com.book;
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;
public class MyDialog extends Dialog {
public MyDialog(Context context, int theme) {
super(context, theme);
}
public MyDialog(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 backButtonText; // 对话框返回按钮文本
private String confirmButtonText; // 对话框确定文本
private View contentView;
// 对话框按钮监听事件
private DialogInterface.OnClickListener
backButtonClickListener,
confirmButtonClickListener;
public Builder(Context context) {
this.context = context;
}
/**
* 使用字符串设置对话框消息
* @param title
* @return
*/
public Builder setMessage(String message) {
this.message = message;
return this;
}
/**
* 使用资源设置对话框消息
* @param title
* @return
*/
public Builder setMessage(int message) {
this.message = (String) context.getText(message);
return this;
}
/**
* 使用资源设置对话框标题信息
* @param title
* @return
*/
public Builder setTitle(int title) {
this.title = (String) context.getText(title);
return this;
}
/**
* 使用字符串设置对话框标题信息
* @param title
* @return
*/
public Builder setTitle(String title) {
this.title = title;
return this;
}
/**
* 设置自定义的对话框内容
* @param v
* @return
*/
public Builder setContentView(View v) {
this.contentView = v;
return this;
}
/**
* 设置back按钮的事件和文本
* @param backButtonText
* @param listener
* @return
*/
public Builder setBackButton(int backButtonText, DialogInterface.OnClickListener listener) {
this.backButtonText = (String)context.getText(backButtonText);
this.backButtonClickListener = listener;
return this;
}
/**
* 设置back按钮的事件和文本
* @param backButtonText
* @param listener
* @return
*/
public Builder setBackButton(String backButtonText, DialogInterface.OnClickListener listener) {
this.backButtonText = backButtonText;
this.backButtonClickListener = listener;
return this;
}
/**
* 设置确定按钮事件和文本
* @param confirmButtonText
* @param listener
* @return
*/
public Builder setConfirmButton(int confirmButtonText, DialogInterface.OnClickListener listener) {
this.confirmButtonText = (String)context.getText(confirmButtonText);
this.confirmButtonClickListener = listener;
return this;
}
/**
* 设置确定按钮事件和文本
* @param negativeButtonText
* @param listener
* @return
*/
public Builder setConfirmButton(String confirmButtonText, DialogInterface.OnClickListener listener) {
this.confirmButtonText = confirmButtonText;
this.confirmButtonClickListener = listener;
return this;
}
/**
* 创建自定义的对话框
*/
public MyDialog create() {
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
// 实例化自定义的对话框主题
final MyDialog dialog = new MyDialog(context, R.style.Dialog);
View layout = inflater.inflate(R.layout.my_dialog, null);
dialog.addContentView(layout,
new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
// 设置对话框标题
((TextView) layout.findViewById(R.id.dialog_title)).setText(title);
// 设置对话框内容
if (message != null) {
TextView dlgMsg = (TextView)layout.findViewById(R.id.dialog_message);
dlgMsg.setText(message);
} else if (contentView != null) {
// if no message set
// 如果没有设置对话框内容,添加contentView到对话框主体
((LinearLayout) layout.findViewById(R.id.dialog_content)).removeAllViews();
((LinearLayout) layout.findViewById(R.id.dialog_content)).addView(
contentView, new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
}
// 设置返回按钮事件和文本
if (backButtonText != null) {
Button bckButton = ((Button) layout.findViewById(R.id.dialog_back));
bckButton.setText(backButtonText);
if (backButtonClickListener != null) {
bckButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
backButtonClickListener.onClick(dialog, DialogInterface.BUTTON_NEGATIVE);
}
});
}
} else {
layout.findViewById(R.id.dialog_back).setVisibility(View.GONE);
}
// 设置确定按钮事件和文本
if (confirmButtonText != null) {
Button cfmButton = ((Button) layout.findViewById(R.id.dialog_confirm));
cfmButton.setText(confirmButtonText);
if (confirmButtonClickListener != null) {
cfmButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
confirmButtonClickListener.onClick(dialog, DialogInterface.BUTTON_POSITIVE);
}
});
}
} else {
layout.findViewById(R.id.dialog_confirm).setVisibility(View.GONE);
}
dialog.setContentView(layout);
return dialog;
}
}
} 使用自定义的Dialog:
@Override
protected Dialog onCreateDialog(int id) {
Dialog dialog = null;
switch (id) {
case DIALOG_EXIT:
MyDialog.Builder myBuilder = new MyDialog.Builder(MainActivity.this);
myBuilder.setTitle("温馨提示");
myBuilder.setMessage("您确定退出吗?");
myBuilder.setBackButton("返 回", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
// 关闭对话框
dismissDialog(DIALOG_EXIT);
}
});
myBuilder.setConfirmButton("确 定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
// 退出电子书
finish();
}
});
dialog = myBuilder.create();
break;
}
return dialog;
} 当点击返回菜单时显示对话框:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// 监听主菜单返回事件
if (keyCode == KeyEvent.KEYCODE_BACK) {
showDialog(DIALOG_EXIT);
return false;
}
return super.onKeyDown(keyCode, event);
}