先看效果图
先自定义一个dialog
public class CustomDialog extends Dialog{
public CustomDialog(Context context, int theme) {
super(context, theme);
// TODO Auto-generated constructor stub
}
public CustomDialog(Context context) {
// TODO Auto-generated constructor stub
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 CustomDialog create() {
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
// 实例化自定义的对话框主题
final CustomDialog dialog = new CustomDialog(context, R.style.CustomDialog);
View layout = inflater.inflate(R.layout.deleteorderdialog, null);
dialog.addContentView(layout,
new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
// 设置对话框标题
((TextView) layout.findViewById(R.id.title)).setText(title);
// 设置对话框内容
if (message != null) {
TextView dlgMsg = (TextView)layout.findViewById(R.id.message);
dlgMsg.setText(message);
} else if (contentView != null) {
// if no message set
// 如果没有设置对话框内容,添加contentView到对话框主体
((LinearLayout) layout.findViewById(R.id.content_message)).removeAllViews();
((LinearLayout) layout.findViewById(R.id.content_message)).addView(
contentView, new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
}
// 设置返回按钮事件和文本
if (backButtonText != null) {
Button bckButton = ((Button) layout.findViewById(R.id.positiveButton));
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.positiveButton).setVisibility(View.GONE);
}
// 设置确定按钮事件和文本
if (confirmButtonText != null) {
Button cfmButton = ((Button) layout.findViewById(R.id.negativeButton));
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.negativeButton).setVisibility(View.GONE);
}
dialog.setContentView(layout);
return dialog;
}
}
}
布局代码: 根节点 LinearLayout 的宽度设置为 fill_parent 而最小的宽度是 280dip ,因此对话框的宽度将始终为屏幕宽度的 87.5%
</pre><p><pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:minWidth="280dip"
android:orientation="vertical" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:gravity="center"
android:orientation="vertical" >
<TextView
android:id="@+id/title"
style="@style/DialogText.Title"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
<LinearLayout
android:id="@+id/content_message"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:id="@+id/message"
style="@style/DialogText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:padding="5dip" />
</LinearLayout>
<TextView
android:layout_width="fill_parent"
android:layout_height="1dp"
android:background="@color/graywhite" />
<!--
<View
android:layout_width="fill_parent"
android:layout_height="1dp"
android:background="@color/graywhite" />
如果用view去填充 将会把整个屏幕占满,这一个问题纠结了我很久 -->
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:id="@+id/positiveButton"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_marginTop="3dip"
android:layout_weight="1"
android:background="@null"
android:minHeight="40dp"
android:singleLine="true"
android:textSize="12dp" />
<View
android:layout_width="1dp"
android:layout_height="match_parent"
android:background="@color/graywhite" />
<Button
android:id="@+id/negativeButton"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_marginTop="3dip"
android:layout_weight="1"
android:background="@null"
android:minHeight="40dp"
android:singleLine="true"
android:textSize="12dp" />
</LinearLayout>
</LinearLayout>
<!-- 定义对话框样式 -->
<style name="CustomDialog" parent="android:Theme.Dialog">
<item name="android:windowFrame">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowNoTitle">true</item>
<item name="android:background">@drawable/dialogshape</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:backgroundDimEnabled">true</item>
<item name="android:backgroundDimAmount">0.6</item>
</style>
<style name="DialogText">
<item name="android:textColor">#FF000000</item>
<item name="android:textSize">12sp</item>
</style>
<style name="DialogText.Title">
<item name="android:textSize">16sp</item>
</style>
最后如何使用:
CustomDialog.Builder customDialog = new CustomDialog.Builder(getActivity());
customDialog.setTitle("友情提醒").setMessage("真的要清空购物车吗?").setBackButton("取消", new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
dialog.dismiss();
}
}).setConfirmButton("确定", new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
shoppingAdapter.celarData();
dialog.dismiss();
}
}).create().show();
好了,完成了。
优快云排版好像有点乱。